Мой код:
//Move the file to another location
File.Move(@"D:\Test.log", @"D:\LogHistory\" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".log");
//Create the file with the same name again in the original location,the time the file was created is not the time the code was executed.
StreamWriter _writer = new StreamWriter(@"D:\Test.log", true);
_writer.Close();
Как показано выше, я хочу переместить файл журнала в папку истории, а затем создать еще один файл журнала с тем же именем в том же месте, но новый файл журнала создается в момент, отличный от текущего времени.
Кто-нибудь может объяснить, почему? Связано ли это явление с файловой системой?
А также: все системы ведения журнала, которые я знаю, имеют «скользящие файловые» цели / приемники, которые они поставляются изначально. Вы используете систему журналирования, верно? Верно?
Похоже, Windows «запоминает», что перед перемещением существовал файл D:\Test.log, и сохраняет время его создания вместе с новым файлом (хотя время «последнего изменения» меняется). Согласно это ожидаемое поведение.
Другой вопрос: почему вас это волнует?
Сообщение на форуме, указанное выше, упоминает великого Рэймонда Чена: devblogs.microsoft.com/oldnewthing/20050715-14/?p=34923
Windows «запоминает», что перед перемещением существовал файл с именем @"D:\Test.log"
.
Когда вы создаете новый файл с тем же именем, время создания берется из исходного файла.
Это функция, называемая туннелированием файлов, и согласно этому ответу на форуме Microsoft от модератора, это ожидаемое поведение.
Также есть статья, в которой это объясняется более подробно: Апокрифическая история туннелирования файловой системы.
Обратите внимание, что время «последнего изменения» меняется, как и ожидалось.
Я рекомендую не полагаться на время создания, поддерживаемое ОС.
Одним из решений, обычно используемых платформами журналирования, является встраивание фактического времени создания в имя файла (например, "Log_2024_07_25__11_11_11.log"
).
«но новый файл журнала создается в другое время, чем текущее». - откуда вы знаете?