12

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

#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 位于同一位置。我该如何解决?

4

8 回答 8

22

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

于 2009-11-17T04:14:53.263 回答
14

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

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

例如:

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

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

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

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

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

于 2009-11-17T04:08:27.627 回答
5

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

于 2009-11-17T04:07:36.840 回答
5

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

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

于 2009-11-17T04:14:02.550 回答
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);
    }
}
于 2009-11-17T04:18:43.597 回答
1

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

于 2009-11-17T05:27:04.417 回答
1

除了上述之外,您可能对显示当前目录感兴趣:

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

这在 gcc/glibc 平台上应该可以正常工作。(我最熟悉那种平台)。如果您在 Windows 类型的平台上, 这里发布了一个关于& Visual Studio的问题。getcwd

于 2009-11-17T04:45:40.070 回答
0

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

希望这可以帮助。

于 2009-11-17T04:11:15.927 回答