我在C中使用fopen(3)来读取文件并对其进行处理。我已将我尝试读取的文件放在当前工作目录中,但我无法读取该文件(Linux环境/ Cygwin环境)。
以下是示例代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
FILE *inFile;
static char fileName[255];
int process_file(FILE *inFile)
{
char ch;
inFile = fopen(fileName,"r");
if (inFile == NULL)
{
perror(fileName);
exit(1);
}
else
{
// Process file
}
fclose(inFile);
return 0;
}
int main(int argc, char *argv[])
{
printf("Enter filename to process \n");
scanf("%s", fileName);
process_file(inFile);
getchar();
return 0;
}
我在当前目录中将文件权限设置为777。生成的二进制文件以及我的源代码驻留在输入文件退出的目录中。为什么文件没有打开?
答案 0 :(得分:0)
您已将 inFile 和 fileName 声明为全局。你应该从
改变你的函数原型int process_file(FILE *inFile)
到
int process_file()
这至少会使您的计划更加清晰。现在关于你的问题:几乎可以肯定的是你在输入文件中输入错误(比如没有放入文件扩展名)。请记住,您需要传递完整的文件名(包括某些系统(如Windows)(默认情况下)将被隐藏的扩展名)。否则,逻辑对我来说是正确的,它应该可以正常工作。
答案 1 :(得分:0)
请务必输入文件名及其扩展名。这可能会导致读取文件时出现问题。
如果您知道文件的扩展名,则只能输入名称,然后在程序中添加扩展名。在scanf("%s", fileName);
添加strcat(fileName, ".txt");
后,如果您只想输入不带扩展名的名称,而您所阅读的文件的扩展名为.txt
。
您的inFile
和fileName
变量是extern,因此您不需要为函数process_file();
提供参数,任何函数都可以访问这些变量。
您可以将功能int process_file();
更改为void process_file();
并删除return 0
,但您不需要。
答案 2 :(得分:0)
我应该再问一下这个问题......
我有三个函数来处理同一个文件,比如process_fil1e1(),process_file2()和process_file3(),即使我在所有三个函数中都调用了fclose()。某种程度上文件句柄未正确关闭或文件指针指向EOF或某些未定义的行为。它运作不正常。
当我使用单个进程文件并一起回放()时,它工作正常......