有谁知道 .Net 库可以在不更改任何时间戳的情况下复制/粘贴或移动文件。 我正在寻找的功能包含在一个名为 robocopy.exe 的程序中,但我希望无需共享该二进制文件即可使用此功能。
想法?
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;
}
在没有管理权限的情况下执行时,Roy 的答案将在尝试覆盖现有只读文件或尝试在复制的只读文件上设置时间戳时抛出异常(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;
}
}
您应该能够读取所需的值,进行所需的任何更改,然后使用 FileInfo 的属性恢复以前的值。
File.Copy() 保留时间戳 https://learn.microsoft.com/en-us/dotnet/api/system.io.file.copy