Простая C Программа, открывающая файл - PullRequest
7 голосов
/ 16 февраля 2011

Я пытаюсь создать программу для открытия файла с именем "write.txt".

#include <stdio.h>

main() {
    FILE *fp;
    fp = fopen("write.txt", "w");
    return 0;
 }

Должно ли это работать? Потому что ничего не возвращает.

Ответы [ 4 ]

13 голосов
/ 16 февраля 2011

Кроме старого варианта main, на самом деле много не так с этим кодом. Следует, за исключением ошибок, создать файл.

Однако, поскольку вы не проверяете возвращаемое значение из fopen, вы можете получить какую-то ошибку и не знать об этом.

Я бы начал с:

#include <stdio.h>
#include <errno.h>
int main (void) {
    FILE *fp;
    fp = fopen ("write.txt","w");
    if (fp == NULL) {
        printf ("File not created okay, errno = %d\n", errno);
        return 1;
    }
    //fprintf (fp, "Hello, there.\n"); // if you want something in the file.
    fclose (fp);
    printf ("File created okay\n");
    return 0;
}

Если вы непреклонны в том, что файл не создается, но приведенный выше код говорит, что это так, то вы можете стать жертвой страшного «IDE работает в другом каталоге, а не в том, что вы думаете» :-)

Некоторые IDE (например, Visual Studio) фактически запускают ваш код, когда они находятся в каталоге, таком как <solution-name>\bin или <solution-name>\debug. Вы можете узнать, поставив:

system ("cd"); // for Windows
system ("pwd") // for UNIXy systems

в вашем коде, чтобы увидеть, где он работает. Это , где будет создан файл, если вы укажете строку относительного пути "write.txt". В противном случае вы можете указать абсолютный путь, чтобы убедиться, что он пытается создать его в определенной точке файловой системы.

2 голосов
/ 16 февраля 2011

Я думаю, вы хотите напечатать содержимое файла write.txt.(Предположим, он содержит символы).

#include <stdio.h>

int main()
{             

    FILE *fp,char ch;

    fp=fopen("write.txt","r");

    if(fp==NULL)
    {
        printf("Some problem in opening the file");
        exit(0);
    } 
    else
    { 
        while((ch=fgetc(fp))!=EOF)
        {
            printf("%c",ch);
        }
    }

    fclose(fp);

    return 0;  
}
2 голосов
/ 16 февраля 2011

Что вы ожидали, что он «вернется» - он открывает файл, на большинстве платформ он создается, если он не существует.

Вы, вероятно, должны закрыть (fp) файл в конце.1003 *

0 голосов
/ 16 февраля 2011

Я думаю, вам следует изучить еще некоторые основы языка C, прежде чем начинать пытаться работать с файлами. Возврат означает, что некоторые данные передаются обратно в вызывающий код из вызываемой функции. В этом случае вы возвращаете 0 в конце вашей программы. Вы ничего не сделали с указателем FILE, за исключением создания нового файла ...

...