[英]Help with opening a file in C on Xcode
我正在尝试在C中打开一个简单的.rtf文件,称为test。我正在使用Xcode。 我的代码是:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, const char * argv[]) {
FILE *filePtr;
filePtr = fopen("test.rtf", "r");
if (filePtr == NULL) {
fprintf(stderr, "Can't open \"test\"\n");
exit(EXIT_FAILURE);
}
else {
printf("File open successful\n");
int x;
/* read one character at a time until EOF is reached */
while ((x = fgetc(filePtr)) != EOF) {
printf("%c", x);
}
}
fclose(filePtr);
return 0;
}
我的test.rtf文件与Xcode.proj目录位于同一目录中。 我的输出是“文件打开成功”,但是我没有从文件中读取任何内容。 我这样做对吗? 谢谢。
该代码完全没有错。 我用一个文件对其进行了测试(尽管不是在Xcode中),并且成绩单是:
pax> echo hello >test.rtf
pax> ./qq.exe
File open successful
hello
因此,显而易见的问题是,当您检查test.rtf时会发生什么? 它实际上有内容吗? 因为,当我这样做时:
pax> rm test.rtf ; touch test.rtf
pax> ./qq.exe
File open successful
我得到的行为与您观察到的相同。
另外,尝试暂时将其重命名为test2.rtf,并确保您得到此错误。 可能打开的文件副本与您想象的不同(在Visual C中经常发生这种情况,因为程序运行的目录并不总是开发人员一开始的想法)。
看起来不错。
至于缺少输出,有两种可能性:
ls -l test.rtf
或dir test.rft
尝试将test.rtf
移至构建目录。 如果您的项目名为MyProject
,请将其移至MyProject/build/Debug/
。
我可以想到可能导致此问题的两件事。 调用fgetc时出现错误,或者获取的输出无法识别。
到达文件末尾或发生错误时,fgetc()将返回EOF。 要确定是否是错误,请在while循环之后尝试:
if (ferror(filePtr) != 0) printf("error: %d.\\n", errno);
.rtf文件不是纯文本文件。 它可能包含一堆格式信息。 您期望看到“您好……”。 但是您可能实际看到的是:
{\\ rtf1 \\ ansi \\ ansicpg1252 \\ cocoartf1038 \\ cocoasubrtf250 {\\ fonttbl \\ f0 \\ fswiss \\ fcharset0 Helvetica;} {\\ colortbl; \\ red255 \\ green255 \\ blue255;} \\ margl1440 \\ margr1440 \\ vieww9000 \\ viewh8400 \\ viewkind0par tx1440 \\ tx2160 \\ tx2880 \\ tx3600 \\ tx4320 \\ tx5040 \\ f0 \\ fs24 \\ cf0您好。 。 。
您只是假设这是GDB输出,而不是程序的输出。
根据您最近的评论,我认为您的程序运行所在的目录中有一个空文件test.rtf
,而实际的test.rtf
文件位于其他目录中。 也许某个时候您的fopen()
调用是fopen("test.rtf", "w");
而不是fopen("test.rtf", "r");
,然后您对其进行了修改。
要查看程序正在运行的目录,请在FILE *filePtr;
之后将以下内容添加到您的程序中FILE *filePtr;
线:
char pwd[512];
if (getcwd(pwd, sizeof pwd) != -1)
printf("In directory %s\n", pwd);
else
fprintf(stderr, "Need bigger buffer, change '512' above\n");
然后,您可以打开一个终端,执行cd <directory>
,并自己测试所需的文件是否是程序正在打开的文件。
您可能希望此文件是纯文本,而不是富文本。 富文本格式有很多格式编码到文件中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.