在 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 文件的主要内容,如果未能解决你的问题,请参考以下文章