fopen无法打开文件

happybamboo 2010-04-26 03:16:59
今天遇到的一个打开文件问题,但不仅与fopen有关,还与文件的读写也有一定的关系,请大家帮忙解决下,情况如下:
我有俩个文件,一个为a.txt,一个为b.txt,其中,a.txt中存放的是b.txt的绝对路径,如c:\b.txt;
我先用fopen函数打开a.txt,然后把c:\b.txt读进一个数组char path【1024】存放,然后我再用fopen(path,"r")去打开b文件,却打不开,我把path输出看结果,也还是c:\b.txt;应该没问题。
如果我直接fopen("c:\\b.txt","r")去打开b文件是没问题的,为什么读到数组再打开就不行了?
先谢过好心人了。
...全文
869 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
peterli_xue 2010-04-26
  • 打赏
  • 举报
回复
已解答啊。。。'\n'会被fgets()读入呵
Beyond_cn 2010-04-26
  • 打赏
  • 举报
回复
恩,有风险存在。。
warriormark 2010-04-26
  • 打赏
  • 举报
回复
居然这个也能上论坛主页。。。
lyla_mei 2010-04-26
  • 打赏
  • 举报
回复
代码没问题。应该是c:\\b.txt后面带一个回车符导致打开文件失败。
你把a.txt的空行删除应该就ok了
赵4老师 2010-04-26
  • 打赏
  • 举报
回复
//把c:\b.txt读进一个数组char path[1024];
fscanf(fa,"%s",path);
//显示path
printf("path=[%s]\n",path);
//逐字节显示path
printf("path[]={\n");
for (i=0;i<strlen(path);i++) printf("0x%02x,",path[i]);
printf("};\n");
huanmie_09 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 happybamboo 的回复:]
引用 22 楼 huanmie_09 的回复:
引用 19 楼 happybamboo 的回复:
引用 18 楼 huanmie_09 的回复:
文件记录是不是只有一行,c:\\b.txt?
不要留空行.
我换行了。跟这个有关系吗?

换行了你打印path的时候是不是后面会多一个回车换行?

确实。。。。。。。。看来是多了一行换行符。谢谢大侠了。。。呜呜呜,搞了一下午,原来是这个……
[/Quote]
以前测试过,在这里也弄了蛮久, 开始也不解.
happybamboo 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 huanmie_09 的回复:]
引用 19 楼 happybamboo 的回复:
引用 18 楼 huanmie_09 的回复:
文件记录是不是只有一行,c:\\b.txt?
不要留空行.
我换行了。跟这个有关系吗?

换行了你打印path的时候是不是后面会多一个回车换行?
[/Quote]
确实。。。。。。。。看来是多了一行换行符。谢谢大侠了。。。呜呜呜,搞了一下午,原来是这个问题啊。太丢人了。
huanmie_09 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 happybamboo 的回复:]
引用 18 楼 huanmie_09 的回复:
文件记录是不是只有一行,c:\\b.txt?
不要留空行.
我换行了。跟这个有关系吗?
[/Quote]
换行了你打印path的时候是不是后面会多一个回车换行?
happybamboo 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 huanmie_09 的回复:]
文件记录是不是只有一行,c:\\b.txt?
不要留空行.
[/Quote]相当于

c:\\b.txt
(空白行)

多了一行空白行。
船过水无痕 2010-04-26
  • 打赏
  • 举报
回复
在我这里也没有问题! 是用楼主代码测试!
happybamboo 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 huanmie_09 的回复:]
文件记录是不是只有一行,c:\\b.txt?
不要留空行.
[/Quote]我换行了。跟这个有关系吗?
huanmie_09 2010-04-26
  • 打赏
  • 举报
回复
文件记录是不是只有一行,c:\\b.txt?
不要留空行.
huanmie_09 2010-04-26
  • 打赏
  • 举报
回复
ptr=fgets(buf,1022,fp);
可能是fgets把回车换行符也读入进去了.
happybamboo 2010-04-26
  • 打赏
  • 举报
回复
难道和strcpy有关系吗?
happybamboo 2010-04-26
  • 打赏
  • 举报
回复
#include<cstdlib>
#include<iostream>
using namespace std;
void main()
{
FILE *fp;
char *ptr=NULL;
char buf[1024];
char path[1024];
// memset(path,0,sizeof(path));
// strcpy(path,"c:\\b.txt");
// cout<<path<<endl;
fp=fopen("a.txt","r");
if(fp != NULL)
{
ptr=fgets(buf,1022,fp);
strcpy(path,ptr);
// while(ptr != NULL)
// {
// cout<<ptr<<endl;
// ptr=fgets(buf,1022,fp);
// }
}
else
cout<<"Error,can not open text.txt file"<<endl;

cout<<path<<endl;

fclose(fp);

cout<<path<<endl;
fp=fopen(path,"r");
if(fp == NULL)
cout<<"Error,can not open "<<path<<" file"<<endl;
else
{
ptr=fgets(buf,1022,fp);
cout<<ptr<<endl;
}
}
huanmie_09 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 liuyu60305002 的回复:]
不是C:\\b.txt 吗? 怎么又成了D:\\b.txt?? 二楼的是正解,c语言会将的反斜杠转义!
[/Quote]
我在本机上测试的.
文件都在d盘根目录下.
船过水无痕 2010-04-26
  • 打赏
  • 举报
回复
不是C:\\b.txt 吗? 怎么又成了D:\\b.txt?? 二楼的是正解,c语言会将的反斜杠转义!
huanmie_09 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 happybamboo 的回复:]
引用 8 楼 huanmie_09 的回复:
a.txt文件内容:
d:\\b.txt

我试过了a.txt文件内容改成c:\\b.txt也一样不行?难道只是我有这个问题?
[/Quote]
我刚在自己的机器上试过了。没问题的。
lyla_mei 2010-04-26
  • 打赏
  • 举报
回复
把代码贴上来看看。
happybamboo 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 huanmie_09 的回复:]
a.txt文件内容:
d:\\b.txt
[/Quote]
我试过了a.txt文件内容改成c:\\b.txt也一样不行?难道只是我有这个问题?
加载更多回复(9)

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧