在 C 中读取具有不同扩展名的 .txt 文件

Posted

技术标签:

【中文标题】在 C 中读取具有不同扩展名的 .txt 文件【英文标题】:Reading in .txt file with different extension in C 【发布时间】:2011-04-04 19:48:15 【问题描述】:

目前我的程序在读取 .txt 文件时没有问题,但我的程序需要读取具有不同文件扩展名的文本文件(需要 .emu)。当简单地将同一文件的扩展名更改为 .emu 时,变量 'file' 为 NULL,因此文件未打开,谁能帮忙?

环顾四周,未能找到解决方案,因此非常感谢任何帮助

这里是源代码:

void handleArgs (const char *filename, int trace, int before, int after) 
FILE *file = fopen(filename, "r");
char *address = malloc(MAX_ADD_LENGTH * sizeof(char));
char *instruction = malloc(MAX_INS_LENGTH * sizeof(char));
long int addressDecoded;

if (file == NULL || file == 0) 
    fprintf(stderr, "Error: Could not open file");

else 
    if (ferror(file) == 0) 
        while (fscanf(file, "%s %s", address, instruction) != EOF) 
            if (strlen(address) == 8 && strlen(instruction) == 8) 
                addressDecoded = strtol(address, NULL, 16);
                printf("%ld\n", addressDecoded);
                //instruction = decodeInstruction(instruction);
            
            else 
                fprintf(stderr, "Error: particular line is of wrong length");
            

        
    


fclose(file);

执行时的参数“文件名”只是“/foopath/test.emu”

【问题讨论】:

你能发布打开你的文件句柄的源代码吗? 你能发布一些代码吗?当您尝试打开文件时,文件在那里吗?扩展对fopen没有影响,所以肯定有其他事情发生 你的问题不是扩展名。 我们可以看一些代码吗?如果您将文件名硬编码到代码中,则必须更新扩展名。 你能发布“ls -al /foopath/test*”的输出吗? (我假设您正在运行某种形式的 Unix,因为您提供的示例路径表明了这一点)。 【参考方案1】:

C 文件扩展名没有什么特别之处。重新阅读您的代码以查找简单的错误,例如在一个地方更改文件名,而不是在另一个地方更改文件名。如果您要传递文件名,请传递整个名称,而不仅仅是句点左侧的部分。

【讨论】:

另外 - 确保新文件直接在当前工作中,它没有设置为只读并且您尝试以写入模式打开,用户上下文可以访问该文件,确保另一个程序没有同时打开该文件(无论如何在 Windows 中)等等等等。 已修复,OSX 隐藏了这样一个事实,即当我将文件重命名为“test.emu”时,它实际上只是“test.emu.txt” @Will,我明白了。当我遇到它时,我总是禁用它。【参考方案2】:

文件是数据,并且有名称。名称中点之前的内容与之后的内容一样多 - 扩展名的创建就像提示文件包含的内容一样,但它们是不需要与文件内容严格相关

该文件可能不存在,或者您的权限可能不足以打开它。或者也许还有其他类型的错误。如何诊断?

当您使用系统调用并且它的行为不符合您的要求时,errno.h (#include <errno.h>) 中有一个名为 errno 的变量,其中包含一个表示上次调用状态的数字。有一个巨大的符号常量列表可以为这些值命名,你可以用谷歌搜索。

例如,如果您尝试打开一个文件并且返回的指针无用,您可能需要检查errno 以查看该文件是否存在,或者您是否超出了打开文件的系统限制等。

【讨论】:

以上是关于在 C 中读取具有不同扩展名的 .txt 文件的主要内容,如果未能解决你的问题,请参考以下文章

在文件夹中查找具有特定扩展名的文件

为啥我无法打开/读取从 Python 调用的 C 扩展名中的 txt 文件?

java 读取文件后,怎样判断它的真正的扩展名

批量重命名具有不同扩展名Linux脚本的多个文件?

在批处理文件中逐行读取txt

C语言如何判断文件类型?