11

我看到以下代码片段出现奇怪的错误:

File.Copy(oldPath, targetPath,true);
File.SetAttributes(targetPath, FileAttributes.Normal);

必须将文件移动到其他地方,并且由于我在源路径上没有写入权限,所以我复制了文件并为目标文件设置了访问权限。在我的系统(Windows 7 SP1)上,这工作正常。

但是,在(据我所知)任何 Windows 10 机器上,程序在 File.SetAttributes 处崩溃并显示消息

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Could not find file 'C:\ProgramData\...\BlankDb.sdf'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.File.SetAttributes(String path, FileAttributes fileAttributes)

这告诉我即使代码已经通过 File.Copy() 行,文件还没有被成功复制。File.Copy() 是否不再同步工作,或者在这方面在不同的操作系统上是否有任何其他更改?

坦率地说,我被难住了。起初我想到了时间问题并尝试将 Copy 调用包装在一个新线程中,直到我读到 File.Copy() 在复制成功或遇到错误之前无论如何都不会返回。

4

3 回答 3

0

You can try this code. (Pls change the paths to yours)

 static void Main(string[] args)
    {
        var oldDir = new DirectoryInfo("D:\\Personal\\Projects\\Desktop\\StackSolutions\\ConsoleApp1\\ConsoleApp1\\OldFilePath\\funy.jpg");
        var newDir = new DirectoryInfo("D:\\Personal\\Projects\\Desktop\\StackSolutions\\ConsoleApp1\\ConsoleApp1\\NewFilePath\\funy1.jpg");

        var oldPath = oldDir.FullName;
        var targetPath = newDir.FullName;

        File.Copy(oldPath, targetPath);
        File.SetAttributes(targetPath, FileAttributes.Normal);
    }
于 2017-11-23T17:23:32.787 回答
0

您只需自己将复制的文件写入目标即可完全绕过 File.Copy() 。

FileStream src = new FileStream(<!!!INSERT SOURCE NAME HERE!!!>, FileMode.Open, FileAccess.Read);
FileStream dst = new FileStream(<!!!INSERT DESTINATION NAME HERE!!!>, FileMode.CreateNew, FileAccess.Write);
byte[] buf = new byte[2097152];
while(src.Position != src.Length)
{
  int numRead = src.Read(buf, 0, buf.Length);
  dst.Write(buf, 0, numRead);
}
dst.Flush();
dst.Close();
dst = null;
src.Close();
src = null;

确保将占位符替换为引用源文件和目标文件的字符串。这将简单地复制源文件,一次 2MB,直到所有数据都被复制。

于 2020-06-21T20:18:38.860 回答
-1

您可以尝试共享目录“C:\ProgramData...”,如果是因为 Windows 10 的权限问题,它会解决问题。

您可以参考http://www.geeksquad.co.uk/articles/how-to-set-up-file-sharing-on-windows-10以获得共享文件夹的帮助。

于 2015-11-26T17:09:19.473 回答