Re[7]: fopen, rename и дата создания файла
От: Carc Россия http://www.amlpages.com/home.php
Дата: 20.02.24 12:23
Оценка:
Здравствуйте, Maniacal, Вы писали:

M>В общем, WinAPI CreateFile ведёт себя так же. Если файл с таким именем недавно был замечен в файловой системе, то при создании нового дата создания берётся от бывшего, хоть его и нет уже.

M>Поправить получается кодом
M>
M>HANDLE h = CreateFileA(acOldLogPathName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
M>FILETIME ft;
M>GetFileTime(h, NULL, &ft, NULL);
M>SetFileTime(h, &ft, NULL, NULL);
M>CloseHandle(h);
M>

M>Но у меня от такого кода глаза мироточить начинают. Но дата создания становится равна дате последнего доступа. Может комп перезагрузить, а то винда с таким аптаймом мне и похуже сюрпризы порой преподносила.

Ну дык я к тому и клоню, что все это NTFS-specific. И или уж что-то танце-бубнить в WinAPI, или уж полагаться на C-шную ширму renaме. Но только что там де факто за ширмой!?!

PS: я бы все эти в CreateFile+SetFileTime в auto-стиль завернул, разве что.
Чего нить типа такого псевдо-кода — думаю мысль понятна...
class CMyFile(LPCTSTR lpszPathName) {//конструктор
     тут всякие CreateFile + проверка возвращенного HANDLE (файла)
}
~CMyFile {//деструктор
   тут всякие SetFileTime
}
private: 
void opeator new(size_t);//хрен вам! А не создание в куче. Только на стеке!
}
Aml Pages Home
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.