C - 打开无效文件

问题描述:

我在想,如何检查打开的文件是否与fopen一起存在?当用户选择名称不正确的文件时,我想要显示一些消息。必须是一些简单的检查,但我无法解决它。C - 打开无效文件

感谢

在PARAM列表:

FILE pFile ; 

则:

pFile = fopen ("myfile.txt","r"); 

if (pFile == NULL) 
printf("No Such File !! "); 
+4

这根本不是一个好的错误信息。 “没有这样的文件”只是可能的失败之一。 – Mat 2011-04-10 14:09:38

+0

这是唯一可能的选项,因为如果文件损坏,他不会像程序那样加载,但他可以通过字符(或行或更多)读取其字符char。 – Batman 2011-04-11 07:05:10

+5

不,不是。这可能是文件或路径上的权限问题。这也可能是一个资源分配错误(fopen可以调用'malloc',这可能会失败)。如果问题可能完全不同,说“没有这样的文件”是不好的做法,并且会使调试更加困难。 – Mat 2011-04-11 07:16:10

很简单:返回FILE*指针会null如果文件不存在。

当然这假定您正在以r的读取模式打开它。

+0

是的,但是如果他没有适当的权限,例如'NULL'。 – 2011-04-10 14:06:27

+0

因此你需要知道你想要你的代码做什么。 – Batman 2011-04-10 14:14:11

+0

那么古老的“perror”呢? – Jack 2011-04-10 14:23:41

fopen失败时,它返回NULL并设置errno以指示错误的类型。

检查返回值,如果是NULL检查errno。您可以使用perrorstrerror等功能来显示有关这些错误的简单消息。

为了使它更加清晰:

f = fopen("some-file-name.ext", "r"); 
if (f == NULL) reporterror(); 

但是,也许你不想使用fopen为检查存在和访问权限。你应该看看stataccess。无论是在C库可用,使用人

+0

访问/统计信息+1。 – Duck 2011-04-10 14:35:54

+0

请注意,access和stat不是C(它们是POSIX)。 – Jens 2011-04-10 16:56:07

+0

@Jens - 你说得对。我记得在我工作的每个平台上都有访问权限,但它显然不是标准的。 – Duck 2011-04-15 16:12:12

the possible errorsopen

不过,我认为你将有一个很难找到一种方法来确定一个文件名是无效的。在大多数系统上(Windows除外),任何不太长的字符串都可能有效(模数/被解释为路径分隔符)。