【发布时间】:2011-04-10 14:02:19
【问题描述】:
我想知道,如何检查我是否打开了 fopen 存在的文件?当用户选择名称错误的文件时,我想显示一些消息。一定是一些简单的检查,但我无法解决。
谢谢
【问题讨论】:
我想知道,如何检查我是否打开了 fopen 存在的文件?当用户选择名称错误的文件时,我想显示一些消息。一定是一些简单的检查,但我无法解决。
谢谢
【问题讨论】:
在您的参数列表中:
FILE pFile ;
然后:
pFile = fopen ("myfile.txt","r");
if (pFile == NULL)
printf("No Such File !! ");
【讨论】:
malloc,这可能会失败)。当问题可能完全不同时说“没有这样的文件”是不好的做法,并且会使调试更加困难。
open 的 linux 手册页,fopen() 也可能出现错误):符号链接过多,已达到此进程的最大打开文件数,路径名太long, 已达到系统打开的最大文件数,内核内存不足,文件系统名称无效,文件太大。
当fopen失败时,它返回NULL并设置errno来指示错误的类型。
检查返回值,如果是NULL,检查errno。您可以使用 perror 或 strerror 之类的函数来显示有关这些错误的简单消息。
【讨论】:
为了更清楚:
f = fopen("some-file-name.ext", "r");
if (f == NULL) reporterror();
但是,您可能不想使用fopen 来检查存在和访问权限。你应该看看stat 和access。都可以在 C 库中使用,也可以使用 man
【讨论】:
见the possible errorsopen:
但是,我认为您将很难找到确定文件名无效的方法。在大多数系统(Windows 除外)上,任何不太长的字符串都可能有效(模 / 被解释为路径分隔符)。
【讨论】:
fopen() 函数打开参数文件名中指定名称的文件,并将其与一个流相关联,该流可以在以后的操作中通过返回的 FILE 指针来识别。
FILE *try_to_open = fopen("Document.txt", "r"); //READ ONLY
如果文件被成功打开,函数返回一个指向 FILE 对象的指针,该指针可用于在未来的操作中识别流;否则,返回一个空指针。所以,如果你想检查文件是否被正确打开,只需检查指针不为空,这样:
if (try_to_open == NULL){
puts("Opening file failed.");
} else {
puts("File opened successfully.");
【讨论】:
很简单:如果文件不存在,则返回的FILE* 指针将为null。
当然,这假设您以r 阅读模式打开它。
【讨论】:
NULL 也是如此。