C中的'fopen'无法在Unix上的当前目录下打开现有文件

问题描述 投票:0回答:3

我正在C中使用fopen(3)读取文件并进行处理。该文件存在于存在二进制文件的当前工作目录中,但我无法读取该文件(Linux环境/ Cygwin环境)。

这里是示例代码:

C代码:

#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。生成的二进制文件以及我的源代码位于输入文件所在的目录中。为什么文件没有打开?

更新:

This question was written in few years back and this code could be improved a lot.
1. The process file should accept char * or char array instead of file pointer
2. unused variables can be removed
3. unused libraries or include files can be removed
4. Can make use of argv to accept filename with path from cmdline
5. return instead of exit in process_file and also proper return code instead of returning 0 from process_file.
c linux unix fopen
3个回答
0
投票

请确保输入带有扩展名的文件名。这可能会导致读取文件时出现问题。

如果知道文件的扩展名,则只能输入名称,然后使程序添加扩展名。如果只想输入不带扩展名的名称,并且读取的文件具有扩展名scanf("%s", fileName);,请在strcat(fileName, ".txt");之后添加.txt

您的inFilefileName变量是extern,因此您不需要为函数process_file();设置参数,任何函数都可以访问这些变量。

您可以将功能int process_file();更改为void process_file();并删除return 0,不需要。


0
投票

您已将inFile


0
投票

我应该更详细地问这个问题...

© www.soinside.com 2019 - 2024. All rights reserved.