帮助在Xcode上打开C文件

时间:2010-01-13 06:23:41

标签: c xcode file

我正在尝试在C中打开一个名为test的简单.rtf文件。我正在使用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目录相同的目录中。我的输出是“文件打开成功”,但我没有从文件中读取任何内容。我这样做了吗?感谢。

6 个答案:

答案 0 :(得分:1)

该代码完全没有问题。我用文件测试了它(虽然不是在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中经常发生,因为程序运行的目录并不总是开发人员首先想到的。)

答案 1 :(得分:0)

看起来不错。

至于缺乏产出,有两种可能性:

  • 您确定该文件包含一些内容吗?可能是ls -l test.rtfdir test.rft
  • 可能它有一些控制字符会导致写入的终端抑制输出。

答案 2 :(得分:0)

尝试将test.rtf移动到您的构建目录。如果您的项目名为MyProject,请将其移至MyProject/build/Debug/

答案 3 :(得分:0)

我可以想到两件可能导致这个问题的事情。调用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 \ viewkind0   \ PARD \ tx720 \ tx1440 \ tx2160 \ tx2880 \ tx3600 \ tx4320 \ tx5040   \ f0 \ fs24 \ cf0您好。 。 。

你只是假设这是GDB输出,而不是程序的输出。

答案 4 :(得分:0)

根据您最近的评论,我认为您的程序运行目录中有一个空文件test.rtf,而您的真实test.rtf文件位于其他目录中。也许您fopen()的某个时间点fopen("test.rtf", "w");来电是fopen("test.rtf", "r");而不是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>

然后,你可以打开一个终端,做{{1}},并自行测试你想要的文件是你的程序正在打开的文件。

答案 5 :(得分:0)

您可能希望此文件是纯文本,而不是富文本。富文本有很多格式编码到文件中。