找出文件是否存在(不是目录)

时间:2019-07-08 20:42:23

标签: c linux posix stdio

我有一个程序接受文件名(图像)作为参数:

program -f path/file.jpg

我想在使用文件之前检查文件名是否有效。我有以下代码:

fp  = fopen(fname, "r");
if (!fp)
    goto err;
if (fclose(fp))
    goto err;

image   = cv::imread(fname, CV_LOAD_IMAGE_COLOR);

(我知道它实际上是C ++,但是我想要一个C解决方案,而不是仅C ++的解决方案)

问题是fopen()对用户传递目录无济于事:它就像文件一样打开它。

用户也有可能故意传递无效类型的文件,但这是用户的错,而openCV会立即中止,所以我不在乎,但是很容易忘记文件名的最后一部分,导致出现路径,我想向用户提供更好的错误消息,而不是无法读取的openCV中止消息。

对于那些好奇的人,openCV中止消息如下:

terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::substr: __pos (which is 140) > this->size() (which is 0)
Aborted

如何检查(文件是否存在&&它不是目录)?

顺便说一句,对fclose结果的检查是多余的,还是失败的可能性很小?

0 个答案:

没有答案