После перемещения файла в другое место и последующего создания файла с тем же именем в исходном месте время создания неверно

Мой код:

//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();

Как показано выше, я хочу переместить файл журнала в папку истории, а затем создать еще один файл журнала с тем же именем в том же месте, но новый файл журнала создается в момент, отличный от текущего времени.

Кто-нибудь может объяснить, почему? Связано ли это явление с файловой системой?

«но новый файл журнала создается в другое время, чем текущее». - откуда вы знаете?

Fildor 25.07.2024 15:53

А также: все системы ведения журнала, которые я знаю, имеют «скользящие файловые» цели / приемники, которые они поставляются изначально. Вы используете систему журналирования, верно? Верно?

Fildor 25.07.2024 15:54

Похоже, Windows «запоминает», что перед перемещением существовал файл D:\Test.log, и сохраняет время его создания вместе с новым файлом (хотя время «последнего изменения» меняется). Согласно это ожидаемое поведение.

wohlstad 25.07.2024 15:59

Другой вопрос: почему вас это волнует?

Fildor 25.07.2024 16:00

Сообщение на форуме, указанное выше, упоминает великого Рэймонда Чена: devblogs.microsoft.com/oldnewthing/20050715-14/?p=34923

canton7 25.07.2024 16:25
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
5
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Windows «запоминает», что перед перемещением существовал файл с именем @"D:\Test.log".

Когда вы создаете новый файл с тем же именем, время создания берется из исходного файла.

Это функция, называемая туннелированием файлов, и согласно этому ответу на форуме Microsoft от модератора, это ожидаемое поведение.
Также есть статья, в которой это объясняется более подробно: Апокрифическая история туннелирования файловой системы.

Обратите внимание, что время «последнего изменения» меняется, как и ожидалось.

Я рекомендую не полагаться на время создания, поддерживаемое ОС.
Одним из решений, обычно используемых платформами журналирования, является встраивание фактического времени создания в имя файла (например, "Log_2024_07_25__11_11_11.log").

Другие вопросы по теме

Java Graphics2D.drawImage() отображает размытое изображение только в Windows с масштабированием 125% и только в версиях Java после Java 8
Кто-нибудь знает, почему моя переменная (x) изменила свое значение с 3 на 0 (1 после x++) в этой программе? Я пытаюсь создать систему регистрации, но она перезаписывает
Как я могу установить текстовое значение в соответствии с позицией
Можно ли определить функцию C++, в которой один параметр передается через регистр EAX?
Получение имени пользователя Windows в формате «Имя Фамилия», когда пользователь является частью группы
Мой чат-сервер Python не отправляет сообщения должным образом
Собственный диалог открытия файла в Windows Ruby
Пытаюсь запустить сервер Minecraft и постоянно получаю сообщение об ошибке: невозможно получить доступ к jarfile
Не могу установить Flutter в Windows
Как заставить CMake находить системные библиотеки по умолчанию для связывания без ручных манипуляций со сценариями?

Похожие вопросы

Как отправить команды в приложение WPF для отображения всплывающих подсказок и значков на панели задач с помощью именованных каналов IPC в С#?
Почему C# DateTime.Now/DateTime.UtcNow опережает SYSUTCDATETIME()/SYSDATETIME() SQL Server, хотя код C# выполняется до SQL-запроса
Как я могу использовать шаблон объявления вне условия if?
Получить документы/файлы с диска Share Point
Получение «System.IO.FileNotFoundException: не удалось загрузить файл или сборку Azure.Core, версия = 1.38.0.0» в приложении-функции Azure
Как динамически устанавливать дополнительные свойства в моделях с несколькими запросами в ASP.NET Core Web Api
Поиск самого длинного словаря. Ключевое совпадение во фразе
Каков эффективный способ удаления данных из потока (или TextWriter)?
C# WPF Изменение текстового события из TextBox
Член C#, чтобы проверить свойство на нулевое значение и при необходимости установить его с помощью асинхронной функции?