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
原文:http://674353165.blog.51cto.com/10786549/1722970