2013-07-30 93 views
0

我在複製文件時遇到了問題,因爲其他業務流程在任一文件上設置了只讀標誌。我不想觸摸源代碼,但始終將目標設置爲讀取/寫入。爲什麼「myFileInfo.IsReadOnly = false;」錯誤地設置了其他屬性

這是我得到了下來縮減到一個簡單的控制檯應用程序的代碼:

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離線)。

爲什麼要設置這些附加屬性?我如何解決它?

回答

1

第一次在複製文件之前創建了destFileInfo,它不存在,它的屬性是'undefined'。

然後代碼複製文件,現在它確實存在於已定義的屬性中,但是destFileInfo仍具有舊數據。

當設置了IsReadOnly屬性時,所有屬性一次寫回文件。那些在stale destFileInfo對象中未定義的結果會被設置。

第二輪只是試圖覆蓋隱藏的系統文件的預期錯誤。

解決方法是在複製文件後調用destFileInfo.Refresh();

相關問題