无法使用fopen()打开文件

时间:2009-11-17 04:05:28

标签: c file-io fopen stdio

我一直在尝试打开文件并输出文本,但我一直在收到错误。所以我想我会从一开始就尝试打开文件。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#define CORRECT_PARAMETERS 3

int main(void)
{
    FILE *file;
    file = fopen("TestFile1.txt", "r");
    if (file == NULL) {
        printf("Error");
    }
    fclose(file);
}

当我运行文件时,“错误”会被打印到控制台,就是这样。 TestFile1.txt与我的.exe位于同一位置。我该如何解决?

8 个答案:

答案 0 :(得分:21)

而不是printf("Error");,您应该尝试perror("Error"),这可能会打印失败的实际原因(如权限问题,无效参数等)。

答案 1 :(得分:10)

你是如何运行该文件的?是来自命令行还是来自IDE?您的可执行文件所在的目录不一定是您的工作目录。

尝试使用fopen中的完整路径名,看看是否可以修复它。如果是这样,则问题如上所述。

例如:

file = fopen("c:\\MyDirectory\\TestFile1.txt", "r");
file = fopen("/full/path/to/TestFile1.txt", "r");

或者打开命令窗口并导航到可执行文件所在的目录,然后手动运行。

顺便说一句,你可以插入一个简单的(分别用于Windows或Linux / UNIX / BSD / etc):

system ("cd")
system("pwd")

fopen之前显示您实际所在的目录。

答案 2 :(得分:5)

一点点错误检查有很长的路要走 - 你总是可以测试errno的值或调用perror()或strerror()来获取有关fopen()调用失败原因的更多信息。

否则有关检查路径的建议可能是正确的...很可能您不在您认为来自IDE的目录中,并且没有您期望的权限。

答案 3 :(得分:4)

嗯,现在您知道存在问题,下一步是弄清楚错误到底是什么,编译运行时会发生什么?:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *file;
    file = fopen("TestFile1.txt", "r");
    if (file == NULL) {
      perror("Error");
    } else {
      fclose(file);
    }
}

答案 4 :(得分:3)

您的可执行文件的工作目录可能设置为保存目录以外的其他目录。检查IDE设置。

答案 5 :(得分:1)

尝试使用文件名的绝对路径。如果您使用的是Windows,请使用getlasterror()查看实际的错误消息。

答案 6 :(得分:0)

必须已将输出文件夹目录配置为IDE中的某个其他目录。您可以更改它或用整个文件路径替换文件名。

希望这有帮助。

答案 7 :(得分:0)

除了上述内容之外,您可能还有兴趣显示当前目录:

int MAX_PATH_LENGTH = 80;
char* path[MAX_PATH_LENGTH];
getcwd(path, MAX_PATH_LENGTH);
printf("Current Directory = %s", path);

这应该在gcc / glibc平台上没有问题。 (我最熟悉那种类型的平台)。有一个问题posted here讨论了getcwd&amp; Visual Studio,如果您使用的是Windows类型的平台。