powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / fopen и дата создания файла
7 сообщений из 7, страница 1 из 1
fopen и дата создания файла
    #33707033
moteus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Пишу простой лог событий в текстовый файл.
Файл лога не должен превышать определенного размера и в один файл не должны поподать записи за разные сутки.
Я пишу в файл с опр. именем и при достижении максимального размера вызываю ф. MoveFile для переименования, а ф. записи в лог должна создать новый файл
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
void WriteLog(const char*FName,const char *str){
   ......
   FILE *out=fopen(FName,"a");
   if(out){ 
     fprintf(out,"%s\n",str);
     fclose(out);
   }
}

Так вот проблема в том что файл созданный вызывом fopen(FName,"a") имеет дату создания предыдущего файла, как будто файл не создаеться заново а просто перезаписываеться старый. Переименование работает правильно и новый файл естественно чистый.
Собственно вопрос:"Что делать?"
Самый простой способ это проверять не дату создания а дату изменения, но все таки хотелось бы разобраться с этой проблемой.
...
Рейтинг: 0 / 0
fopen и дата создания файла
    #33707360
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вероятнее всего, проблема в режиме открытия файла - "а"

r Open for reading only.
w Create for writing. If a file by that name already exists, it will be overwritten.
a Append; open for writing at end-of-file or create for writing if the file does not exist.
r+ Open an existing file for update (reading and writing).
w+ Create a new file for update (reading and writing). If a file by that name already exists, it will be overwritten.
a+ Open for append; open (or create if the file does not exist) for update at the end of the file.

Пробуйте w,w+
...
Рейтинг: 0 / 0
fopen и дата создания файла
    #33707460
moteus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это было первое что я попробывал - результат тотже.
при чем я даже пробовал удалять файлы в ручную между запусками программы.
Щас попробую fstream, просто для эксперимента т.к. у меня он работает в 2 раза медленнее. Так что в итоге я наверное буду проверять время модификации файла.

Удачи.

ЗЫ
MSVC 6 + W2k + FAT32
...
Рейтинг: 0 / 0
fopen и дата создания файла
    #33707533
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, это особенности файловой системы, но могу только предполагать...

Но можно попробовать другие варианты решения проблемы...

1. Явно удалять файл, потом создавать по-новой
2. int creat(const char *path, int amode);
3. .... Мало ли ещё что :)
Может и получится...

А лучше сделать универсальнее:
4. Для каждой даты создавать файл с уникальным именем (например с датой в названии).

Удачи
...
Рейтинг: 0 / 0
fopen и дата создания файла
    #33707633
moteus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За одно число может быт несколько файлов, поэтому я и сделал один активный файл и для него держу его название(дату) и перед записью ее проверяю, при достижении максимального размера я беру эту строку добовляю к ней текущий индекс и переименовываю. Соответственно в штатном режиме все идет нормально. Если такой файл есть я просто увеличиваю индекс, но если программу не перегружали все проходит с первой попытки.
Но при запуске этот текущий файл может уже существовать, и вот сдесь и возникает проблема. Его необходимо переименовать с определенной датой в имени.

Удачи.
...
Рейтинг: 0 / 0
fopen и дата создания файла
    #33707727
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
moteusЗа одно число может быт несколько файлов, поэтому я и сделал один активный файл и для него держу его название(дату) и перед записью ее проверяю, при достижении максимального размера я беру эту строку добовляю к ней текущий индекс и переименовываю. Соответственно в штатном режиме все идет нормально. Если такой файл есть я просто увеличиваю индекс, но если программу не перегружали все проходит с первой попытки.
Но при запуске этот текущий файл может уже существовать, и вот сдесь и возникает проблема. Его необходимо переименовать с определенной датой в имени.

Удачи.
Можно ещё завести какой-нибудь ini-файл и в нём хранить имя последнего использовавшегося... а при запуске проверять...
...
Рейтинг: 0 / 0
fopen и дата создания файла
    #33707815
moteus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажеться это не имеет смысла.
В сутки будет не более 30 файлов.
Файлы именуються как 20060504.001.log
При запуске я нахожу файл с текущей датой и максимальным индексом и
устанавливаю индекс и при работе происходит только одно обращение с проверкой наличия файла.
При переходе на новую дату индекс сбрасываеться.
Необходимость сознания нового файла по дате я отслеживаю по данным хранящимся в программе, а для размера обращаюсь к файлу. Хотя можно и его отслеживать в программе, т.к. изменять активный файл врядли будут.
Единственный компромис это то что при каждом запуске активный файл переименовываеться, но это ИМХО вполне приемлемо.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / fopen и дата создания файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]