C - fwrite () не выводится в файл - PullRequest
       13

C - fwrite () не выводится в файл

1 голос
/ 06 декабря 2010

Никогда не использовал fwrite (), поэтому я не уверен, что именно я делаю неправильно. Сейчас я просто тестирую его, и все, что я хочу сделать, это попытаться записать один символ в файл, пока он не достигнет конца. Файл, в который я пишу, - это файл, который я скачал с сайта моего учителя. Когда я проверяю его свойства, тип указывается только как «файл». Это должен быть пустой 2-мегабайтный файл, в который мы могли бы написать наш код (лаборатория файловой системы, если кому-то интересно). Вот мой код:

#include <stdio.h>
#include <string.h>
int main()
{
    char c;
    FILE *fp;   
    char testing[2] = {'c'};  

    fp = fopen("Drive2MB", "rw"); 

    fseek(fp, 0, SEEK_SET);     //make sure pointers at beginning of file
    while((c=fgetc(fp))!=EOF)
    {
        fwrite(testing, 1, sizeof(testing), fp);
        fseek(fp, 1, SEEK_CUR);  //increment pointer 1 byte
    }
    fclose(fp);
} 

Когда я запускаю это, появляется сообщение об ошибке «Отладочное утверждение не удалось! ... Выражение :(« Недопустимый режим открытия файла », 0) и выводится сообщение« Программа »[3896] filesystem.exe: Native» имеет выход с кодом 3 (0x3). "

Ответы [ 4 ]

3 голосов
/ 06 декабря 2010

Вы открыли файл для чтения (вот что означает r в fopen("Drive2MB", "r");).Вы не можете писать в файл, открытый для чтения.

1 голос
/ 06 декабря 2010

Вы открываете его в режиме только для чтения

Используйте r + для fopen

0 голосов
/ 06 декабря 2010

Вы открыли файл для чтения с помощью части r в fopen. Для записи в файл вы можете открыть его в режиме чтения / записи или в режиме записи.

// Read/write mode
fp = fopen("Drive2MB", "r+");

// Write only mode
fp = fopen("Drive2MB", "w");

Мне никогда не нравилось использовать "rw" лично. Когда вы открываете файл, у него действительно должна быть одна причина для открытия. Вам также не нужно вызывать fseek, чтобы перейти к началу файла, и вам не нужно использовать fseek для перемещения указателя файла. fopen автоматически откроет его до начала файла, а fwrite автоматически продвинет указатель. fseek следует использовать только в том случае, если вы «ищете» внутри файла, чтобы добраться до определенной точки.

В случае, если вы дали, вам понадобится только режим записи ("w"), поскольку вы никогда не читаете из файла.

0 голосов
/ 06 декабря 2010
fp = fopen("Drive2MB", "r")

Ваше открытие вашего файла только для чтения

попробуй

fp = fopen("Drive2MB", "r+"); 
...