Скачать MetaTrader 5

FileOpen - как сделать дозапись в файл?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Mopo3
47
Mopo3  
Доброго дня!Подскажите пожалуйста. Не получается сделать дозапись в файл.

Исходные условия:
1. Файл существует.
2. В файле есть текст.

Нужно: в этот файл дозаписать некий текст. Старый текст не должен быть удален.


Код на текущий момент:

   int Результат = FileOpen(ПолноеИмяФайла,  FILE_CSV|FILE_WRITE|FILE_COMMON|FILE_ANSI, ";");
   if (Результат == INVALID_HANDLE) return(false); //если файла нет или он заблокирован - ничего не делаем
 
   FileSeek(Результат, 0, SEEK_CUR); //новая строка
   FileWrite(Результат, ЗаписываемаяСтрока);
   FileClose(Результат);


Проблема:
Старый текст каждый раз удаляется, т.е. идет перезапись файла.
MT5


ВОПРОС:
как добиться требуемого?


Заранее спасибо!
Igor Konyashin
3154
Igor Konyashin  
Попробуйте с SEEK_END
Alexey Volchanskiy
20690
Alexey Volchanskiy  
Mopo3:
Доброго дня!Подскажите пожалуйста. Не получается сделать дозапись в файл.

Исходные условия:
1. Файл существует.
2. В файле есть текст.

Нужно: в этот файл дозаписать некий текст. Старый текст не должен быть удален.


Код на текущий момент:

   int Результат = FileOpen(ПолноеИмяФайла,  FILE_CSV|FILE_WRITE|FILE_COMMON|FILE_ANSI, ";");
   if (Результат == INVALID_HANDLE) return(false); //если файла нет или он заблокирован - ничего не делаем
 
   FileSeek(Результат, 0, SEEK_CUR); //новая строка
   FileWrite(Результат, ЗаписываемаяСтрока);
   FileClose(Результат);


Проблема:
Старый текст каждый раз удаляется, т.е. идет перезапись файла.
MT5


ВОПРОС:
как добиться требуемого?


Заранее спасибо!

А чего справкой не пользуетесь? Нужен второй вариант флагов.

Есть некоторые особенности работы при указании флагов чтения и записи:

  • Если указан FILE_READ – делается попытка открытия уже существующего файла. Если файл не существует, то открыть файл не получится, новый файл не создается.
  • Если FILE_READ|FILE_WRITE – создаётся новый файл если файл с таким именем отсутствует.
  • Если FILE_WRITE –  файл создается заново с нулевым размером.
Vasiliy Sokolov
25529
Vasiliy Sokolov  
int Результат = FileOpen(ПолноеИмяФайла,  FILE_CSV|FILE_READ|FILE_WRITE|FILE_COMMON|FILE_ANSI, ";");
if (Результат == INVALID_HANDLE) return(false); //если файла нет или он заблокирован - ничего не делаем
  
FileSeek(Результат, 0, SEEK_END); //новая строка
FileWrite(Результат, ЗаписываемаяСтрока);
FileClose(Результат);
Oksana Berenko
2733
Oksana Berenko  
Прочитать файл до конца FileIsEnding прежде чем записывать. Иначе перезапись происходит с непонятного места. А если до конца прочитать, то с конца текст добавляется.
Vasiliy Sokolov
25529
Vasiliy Sokolov  
Oksana Berenko:
Прочитать файл до конца FileIsEnding прежде чем записывать. Иначе перезапись происходит с непонятного места. А если до конца прочитать, то с конца текст добавляется.

Не надо ничего читать. Достаточно переместить файловый указатель в конец файла:

FileSeek(Результат, 0, SEEK_END); //конец файла
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий