有没有人知道.Net库可以在不更改任何时间戳的情况下复制/粘贴或移动文件。我正在寻找的功能包含在名为robocopy.exe的程序中,但我希望此功能不必共享该二进制文件。.Net库在保留时间戳的同时移动/复制文件
想法?
有没有人知道.Net库可以在不更改任何时间戳的情况下复制/粘贴或移动文件。我正在寻找的功能包含在名为robocopy.exe的程序中,但我希望此功能不必共享该二进制文件。.Net库在保留时间戳的同时移动/复制文件
想法?
public static void CopyFileExactly(string copyFromPath, string copyToPath)
{
var origin = new FileInfo(copyFromPath);
origin.CopyTo(copyToPath, true);
var destination = new FileInfo(copyToPath);
destination.CreationTime = origin.CreationTime;
destination.LastWriteTime = origin.LastWriteTime;
destination.LastAccessTime = origin.LastAccessTime;
}
您可以阅读和写入所有有时间戳,使用FileInfo
类:
你应该能够阅读您需要的值,做出您希望的任何更改,然后恢复以前的值通过使用FileInfo的属性。
当执行没有管理权限罗伊的回答试图覆盖现有只读文件或试图设置复制只读文件的时间戳时,当会抛出异常(UnauthorizedAccessException)。
以下解决方案基于Roy的回答,但将其扩展为覆盖只读文件,并更改复制的只读文件的时间戳,同时保持文件的只读属性,同时仍在执行而无需管理员权限。
public static void CopyFileExactly(string copyFromPath, string copyToPath)
{
if (File.Exists(copyToPath))
{
var target = new FileInfo(copyToPath);
if (target.IsReadOnly)
target.IsReadOnly = false;
}
var origin = new FileInfo(copyFromPath);
origin.CopyTo(copyToPath, true);
var destination = new FileInfo(copyToPath);
if (destination.IsReadOnly)
{
destination.IsReadOnly = false;
destination.CreationTime = origin.CreationTime;
destination.LastWriteTime = origin.LastWriteTime;
destination.LastAccessTime = origin.LastAccessTime;
destination.IsReadOnly = true;
}
else
{
destination.CreationTime = origin.CreationTime;
destination.LastWriteTime = origin.LastWriteTime;
destination.LastAccessTime = origin.LastAccessTime;
}
}
当目标文件已经存在时,您不需要在'destination'(或稍后创建)调用'Refresh'来获取正确的值吗? –
@ Paul Ruane:你说得对 - 我已经更新了相应的答案,谢谢。 –