x++;
делает следующее:
int returnValue = x;
x = x+1;
return returnValue;
, Как Вы видите, исходное значение сохраняется, x увеличен, и затем исходное значение возвращается.
то, Что это заканчивает тем, что делало, сохраняет значение 10 где-нибудь, установка x, равная 11, и затем возвращается 10, который заставляет x быть задержанным к 10. Обратите внимание, что x действительно на самом деле становится 11 для нескольких циклов (принимающий компиляторную оптимизацию).
Значения FileInfo
загружаются только один раз и затем кэшируются. Чтобы получить текущее значение, вызовите Refresh ()
перед получением свойства:
f.Refresh();
t = f.LastAccessTime;
Другой способ получить текущее значение - использовать статические методы класса File
:
t = File.GetLastAccessTime(path);
] Пробовали ли вы вызвать Refresh ()
непосредственно перед доступом к свойству (чтобы избежать получения кэшированного значения)? Если это не сработает, смотрели ли вы, что одновременно показывает Explorer? Если проводник показывает неверную информацию, то, вероятно, вы не можете решить эту проблему - возможно, информация обновляется, например, только при закрытии дескриптора файла.
В окнах есть параметр, который иногда устанавливается, особенно в серверных системах, так что время изменения и доступа к файлам не устанавливается для повышения производительности.
Из MSDN:
При первом вызове FileSystemInfo вызывает Refresh и возвращает кэшированная информация об API, чтобы получить атрибуты и так далее. На последующих звонков, вы должны позвонить в Refresh, чтобы получить последняя копия информации.
Если ваше приложение выполняет запись, я думаю, вам придется «прикоснуться» к файлу, установив свойство LastWriteTime самостоятельно между каждым буфером записываемых данных. Какой-то псевдокод:
while(bytesWritten < totalBytes)
{
bytesWritten += br.Write(buffer);
myFileInfo.LastWriteTime = DateTime.Now;
}
Я не уверен, насколько сильно это повлияет на производительность записи.