- 呼叫端沒有對應權限
- 目的端檔案屬性為唯讀 (ReadOnly)
- overwrite 為 true,目的端檔案存在且檔案屬行為隱藏 (hidden),但是來源端檔案屬性不是隱藏 (hidden)
遇上第二種情況,下面簡易紀錄
唯讀檔案
C# Code
using System.IO;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
string sourceFile = @"D:\FileCopyException\Source\FileCopyException.txt";
string DestFile = @"D:\FileCopyException\Dest\FileCopyException.txt";
// 目的端沒有檔案,可以正常複製過去
File.Copy(sourceFile, DestFile, true);
// 第一次複製過去後,複製檔案會保留唯讀屬性,
// 所以第二次複製過去,就算有 overrite 也會拋出 Exception
File.Copy(sourceFile, DestFile, true);
}
}
}
執行後拋出的 Exception
未處理的例外狀況: System.UnauthorizedAccessException: 拒絕存取路徑 'D:\FileCopyException\Dest\FileCopyException.txt'。
於 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
於 System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost)
於 System.IO.File.Copy(String sourceFileName, String destFileName, Boolean overwrite)
於 ConsoleApp1.Program.Main(String[] args) 於 D:\ConsoleApp1\Program.cs: 行 20
一開始看到 System.IO.__Error.WinIOError 以為是 IOException,還想說不是有 overrite,被自己誤導。- 延伸閱讀
- [C#] 刪除唯讀檔案
沒有留言:
張貼留言