Здравствуйте, 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);//хрен вам! А не создание в куче. Только на стеке!
}