关于C打开文件失败

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;

}

结果:

wKiom1ZuqQaTFHtLAAAWnaPfnpo812.png





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

{

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;

}

结果:

wKioL1ZuqcWTiJ7CAAAbrxOKI1g923.png

   同时我们要注意一个计算机的小知识带点,计算机的组织里有一些关于文本的一些设置,一般的计算机在默认状态就具有某些特定文件的后缀,比如说我在上面测试所创建的文件名为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

结果:

wKiom1ZurZbTBGO7AAAb078XZo4549.png

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

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

结果:

wKiom1ZurlrBCKz9AAAbvrlzWlU376.png

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

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值