首页 > 其他 > 详细

关于C打开文件失败

时间:2015-12-14 23:24:01      阅读:345      评论:0      收藏:0      [点我收藏+]

C语言可以做到使用文件的多种方式,例如打开一个用于读取的文本文件,创建一个用于写入的文本文件,附加一个文本文件等等。现在我们讨论一下关于使用C语言打开文件错误的情景。

   fopen函数用来打开一个文件,其有固定的调用形式:文件指针名=fopen(文件名,"r"),我们这里讨论打开所以是"r",如有其他操作则给fopen传入相应的使用文件方式,例如附加一个文本是"rb"。文件名必须被声明为FILE类型的指针变量。 

   例如我现在要打开一个文本,我在E//KanKan目录下创建一个日记本文档,将其命名为wode,日记本文档的后缀是.jnt。现在我们可以在编译器底下写入相应的代码来打开这个日记本文档。

   现在我先让FILE指针变量指向一个test.c文件,注意,现在肯定会打开失败,应为E目录下根本不存在test.c文件

代码演示:

{

FILE *p;

p = fopen("E:\\KanKan\\test.c", "r");

if (p == NULL)

{

printf("open file error\n");

}

else

{

printf("open file success\n");

}

system("pause");

return 0;

}

结果:

技术分享





现在我们将代码略微修改为:

{

FILE *p;

p = fopen("E:\\KanKan\\wode.jnt", "r");

if (p == NULL)

{

printf("open file error\n");

}

else

{

printf("open file success\n");

}

system("pause");

return 0;

}

结果:

技术分享

   同时我们要注意一个计算机的小知识带点,计算机的组织里有一些关于文本的一些设置,一般的计算机在默认状态就具有某些特定文件的后缀,比如说我在上面测试所创建的文件名为wode的文件,计算机默认的已经在wode后面添加了.jnt,如果不小心将文本创建为wode.jnt,现在我们在open函数里依然传入wode.jnt肯定会编译失败。

  同时在我们编译器为我们打开文件分装了一个专门的库函数strerror,如果打开文件失败我们可以在printf函数里实现对strerror函数进行链式访问,可以自定分析出文件是因为什么原因而打开失败

代码演示:


FILE *p;

p = fopen("E:\\KanKan\\wode.jnt", "r");

if (p == NULL)

{

printf("open file error\n");

printf("error: %s\n", strerror(errno));

}

else

{

printf("open file success\n");

}

system("pause");

return 0;

}

使用strerror函数头文件是errno.h

结果:

技术分享

strerror函数可以接受不同的int数字,不同数字代表不同文件打开的错误

例如:printf("error: %s\n", strerror(4));

结果:

技术分享

本文出自 “anser” 博客,请务必保留此出处http://674353165.blog.51cto.com/10786549/1722970

关于C打开文件失败

原文:http://674353165.blog.51cto.com/10786549/1722970

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!