Похоже, что Directory.GetFiles() в C# изменяет дату последнего доступа к файлу. Я часами работаю в Интернете и не могу найти работу по этой проблеме. В любом случае, чтобы сохранить все атрибуты MAC (измененные, доступные, созданные) файла? Я использую Directory.GetDirectories(), Directory.GetFiles() и FileInfo.Directory.GetFiles, сохраняющий последнее время доступа
Кроме того, fi.LastAccessTime дает странные результаты - дата правильна, однако, время от 2 минуты, или несколько часов.
Time of function execution: 10/31/2008 8:35 AM
Program Shows As Last Access Time
0_PDFIndex.html - 10/31/2008 8:17:24 AM
AdvancedArithmetic.pdf - 10/31/2008 8:31:05 AM
AdvancedControlStructures.pdf - 10/30/2008 1:18:00 PM
AoAIX.pdf - 10/30/2008 1:18:00 PM
AoATOC.pdf - 10/30/2008 12:29:51 PM
AoATOC2.pdf - 10/30/2008 1:18:00 PM
Actual Last Access Time
0_PDFIndex.html - 10/31/2008 8:17 AM
AdvancedArithmetic.pdf - 10/30/2008 12:29 PM
AdvancedControlStructures.pdf - 10/30/2008 12:29 PM
AoAIX.pdf - 10/30/2008 12:29 PM
AoATOC.pdf - 10/30/2008 12:29 PM
AoATOC2.pdf - 10/30/2008 12:29 PM
Ниже приведен метод, который я использую. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Спасибо!
public void PopulateTreeView(string directoryValue, ref TreeNode parentNode)
{
string[] directoryArray = Directory.GetDirectories(directoryValue);
string[] fileArray = Directory.GetFiles(directoryValue, "*.*", SearchOption.AllDirectories);
try
{
#region Directories
if (directoryArray.Length != 0)
{
foreach (string directory in directoryArray)
{
DirectoryInfo di = new DirectoryInfo(directory);
TreeNode dirNode = parentNode.Nodes.Add(di.Name);
FileNode fn = new FileNode();
fn.bIsDir = true;
fn.dir = di;
dirNode.Tag = fn;
PopulateTreeView(directory, ref dirNode);
Application.DoEvents();
}
}
#endregion
#region Files
if (fileArray.Length != 0)
{
foreach (string file in fileArray)
{
FileInfo fi = new FileInfo(file);
TreeNode fileNode = parentNode.Nodes.Add(fi.Name);
FileNode fn = new FileNode();
fn.bIsDir = false;
fn.file = fi;
fileNode.Tag = fn;
fileNode.ImageIndex = 1;
Console.WriteLine(fi.Name + " - " + fi.LastAccessTime);
}
}
#endregion
}
catch (UnauthorizedAccessException)
{
parentNode.Nodes.Add("Access denied");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
Application.DoEvents();
}
}
я знаю, различия между атрибутами. Мне нужно, чтобы файл оставался одним и тем же всеми атрибутами и метаданными, как если бы моя программа никогда не касалась файла; это включает в себя последнюю дату доступа.
Документация FSUTIL отмечает, что «для большинства из этих параметров требуется перезагрузка, чтобы она вступила в силу». – GalacticCowboy 2008-10-31 14:35:11