проблема записи в файл - PullRequest
       5

проблема записи в файл

1 голос
/ 01 марта 2011
FILE *ExcelFile = fopen("testdata.csv","w");
if (ExcelFile == NULL)
    return -1;
fprintf(ExcelFile,"1 2 3");

fprintf(ExcelFile,"\n");
fclose(ExcelFile);

//==============================================
FILE *fa = fopen("testdata.csv","w");
if (fa == NULL)
    return -1;
fseek (fa, 6 , SEEK_SET );
fprintf(ExcelFile,"a");


fclose(fa);

в коде я написал 1 2 3 в файл, а также вставил '\ n' (требуется для программы), теперь я хочу поставить после 3, как 1 2 3 a, но проблема, с которой я сталкиваюсь, заключается в том, что мой код стереть все символы просто написать. требуется помощь. спасибо

Ответы [ 5 ]

2 голосов
/ 01 марта 2011

Прежде всего, файл CSV должен иметь «значения, разделенные запятыми», как видно из названия.Поэтому вместо «1 2 3» лучше использовать «1,2,3» или «1; 2; 3».

Теперь существует несколько способов открыть файл: вы используете только «w» в качестве режима «записи».Когда вы находитесь в режиме записи, вы стираете свой файл.Вы можете использовать режим «a» как «добавить», что означает, что после него будет помещено все.

Вы также можете:

1 °) Сначала прочитайте ваш файл с помощью «rрежим и сохранить его в памяти.Затем закройте его.

2 °) Затем откройте файл в режиме «w», скопируйте то, что вы сохранили, и затем внесите дополнение.Затем закройте его.

(Существует также «режим чтения и записи», проверьте ссылку, предоставленную другим ответом; но это решение может быть легко разбито на маленькие кусочки, чтобы небольшие функции выполняли каждую свою частьработы).

2 голосов
/ 01 марта 2011

Каждый раз, когда вы открываете свой файл, вы открываете его как параметр 'w'.В Си это имеет особое значение: начать запись в начале файла.

Для вашей первой записи файла это нормально, но для каждой последующей записи вы перезаписываете свой предыдущий контент.

Решение Вместо этого используйте атрибут 'a'.Как это:

FILE *fa = fopen("testdata.csv","a");

Подробнее о fopen можно узнать здесь ...

РЕДАКТИРОВАТЬ

Читая ваши комментарии,Я понимаю, что когда ты пишешь снова, следующая вещь начинается с новой строки.Это из-за вашей начальной записи 1 2 3 \n (\n делает новую строку).

Чтобы исправить это, вы можете:

  • Не писать '\ n' совсем. ИЛИ
  • Сначала прочитайте весь файл, переписайте его без \n, а затем напишите новые a и \n
1 голос
/ 01 марта 2011

Вы хотите режим "r +". В режиме «а» все записи будут идти в конец файла.

1 голос
/ 01 марта 2011

Вы указали w для fopen(), что означает «создать файл или открыть для перезаписи, если он уже существует».

Таким образом, ваш второй вызов fopen() очистил содержимое файла.

Используйте a для: «создать файл или добавить его, если он уже существует».

0 голосов
/ 01 марта 2011

fopen (имя файла, "a")

a = append

...