我在复制文件时遇到问题,因为另一个业务流程在任一文件上设置了只读标志。我不想触摸源,但始终将dest作为读/写。
这是我需要编写的简单控制台应用程序的代码:
using System.IO;
namespace TrialConsole
{
class Program
{
static void Main(string[] args)
{
string fileSrc = "Src.txt";
string fileDest = "Dest.txt";
FileInfo destFileInfo = new FileInfo(fileDest);
if (destFileInfo.Exists && destFileInfo.IsReadOnly)
destFileInfo.IsReadOnly = false;
Directory.CreateDirectory(destFileInfo.DirectoryName);
(new FileInfo(fileSrc)).CopyTo(fileDest, true);
destFileInfo.IsReadOnly = false;
}
}
}
要运行此操作,您还需要在工作目录中创建Src.txt。
当我第一次跑步时,似乎没有任何事情发生。 Dest.txt没有出现。第二次抱怨目标文件是只读的。
只有当我在资源管理器中显示隐藏和系统文件时,我才能看到Dest.txt,但它具有HSAO设置的属性(O表示在NTFS中脱机)。
为什么要设置这些附加属性?我该如何解决?
答案 0 :(得分:1)
第一次在复制文件之前创建destFileInfo,它不存在,并且它的属性是'undefined'。
然后代码复制文件,现在它确实存在已定义的属性,但destFileInfo仍然具有旧数据。
当设置IsReadOnly属性时,所有属性一次性写回文件。在陈旧的destFileInfo对象中未定义的那些最终得到设置。
第二轮是试图覆盖隐藏系统文件的预期错误。
解决方案是在复制文件后调用destFileInfo.Refresh();
。