簡體   English   中英

File.Copy和WPF

[英]File.Copy and WPF

我在WPF中使用File.Copy方法有一個小問題,我的代碼非常簡單,運行它時出現異常,

Could not find a part of the path 'Images\37c31987-52ee-4804-8601-a7b9b4d439fd.png'.

其中Images是一個相對文件夾。

正如我所說的,這是我的代碼,簡單且相同的代碼在控制台應用程序中可以正常工作,完全沒有問題。

string filenamae = System.IO.Path.Combine(images, Guid.NewGuid().ToString() + System.IO.Path.GetExtension(imageFile)); ;
System.IO.File.Copy(imageFile, filenamae);
this.ImageLocation = string.Empty;

因此,如果有什么可以幫助的,謝謝。

圖片文件夾是否存在? File.Copy不會自動創建它。

您知道當前目錄是什么嗎? 文件打開/保存框可以更改此設置。 因此,使用絕對路徑總是更安全。

做一個

Path.GetFullPath(filename)

並查看其指向的位置。 這是正確的位置嗎?

如果您使用絕對路徑而不是相對路徑,那么它行得通嗎?

訪問文件之前,應調用System.IO.File.Exists()。 從錯誤描述中還不清楚復制之前是否存在原始文件。

如果未指定絕對路徑,則通常會從意外位置(通常是進程的當前工作目錄)解析相對路徑。 調用此方法可能會告訴您該進程當前正在運行:

System.IO.Directory.GetCurrentDirectory()

您永遠不要假設正在運行的進程的當前工作目錄,因為用戶可以從任何地方啟動程序。 即使您認為總是控制當前的工作目錄,您也會驚訝於您經常出錯。

有必要將所有外部文件嵌入到可執行文件中,並更改代碼以使用這些嵌入式文件,而不是期望磁盤上有文件。

要使用圖像或任何您需要的文件(“ xml / txt / doc”),您需要將文件的構建操作設置為“嵌入式資源”,並使用文件的完全限定名稱調用該方法,並在其中匯編名稱像這樣:

[RootNameSpaceOfTheProject] [NameOfFolderInTheProject]。[FileNameWithExtension]

例:

在此處輸入圖片說明

調用方法:

var b = ResourceOperations.GetResourceAsByteArray(“ Store.Resources.EmbeddedIcons.toolbox.png”); 現在,您可以將字節數組寫入例如臨時文件中,並將其用作圖像源,也可以直接從字節數組構建圖像。 至少,您有自己的數據...

並將此文件保存到磁盤,我們應該通過@ Jon Skeet編寫代碼:

 public static void CopyStream(Stream input, Stream output)
 {
     // Insert null checking here for production
     byte[] buffer = new byte[8192];

     int bytesRead;
     while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
     {
         output.Write(buffer, 0, bytesRead);
     }
  }

然后調用它:

   using (Stream input = assembly.GetManifestResourceStream(resourceName))
   using (Stream output = File.Create(path))
   { 
      CopyStream(input, output);
   }

如果文件路徑目錄位於本地,則使用\\\\作為文件路徑目錄。如果您的文件存在於網絡路徑中,請使用\\\\\\\\(第一)。以便它查找網絡驅動器。

謝謝

你有調試器嗎? 為什么不插入斷點並檢查每個步驟使用的值?

如果文件系統顯示“找不到文件”,那么我就不用理會它了……

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM