2013-07-03 18 views
2

我的程序要複製從Windows文件系統中的文件,用戶可能有他們的客戶已經和替換現有的圖像是縮略圖/ profileimage在應用程序中。如何從Windows文件系統複製圖像的WinRT(地鐵)C#/ XAML

保存了舊林這樣的新形象:

async private void saveImage(string name, int clientId) 
    { 
     StorageFolder folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("ProfileImages", CreationCollisionOption.OpenIfExists); 

     try 
     { 

      StorageFile newFileImage = await StorageFile.GetFileFromPathAsync(photoImageStoragePath); 

      StorageFile originalFileImage = await StorageFile.GetFileFromPathAsync(originalPhotoImageStoragePath); 
      await newFileImage.CopyAndReplaceAsync(originalFileImage); 

     } 
     catch (Exception ex) 
     {     
      var name2 = string.Format("{0}_{1}{2}", name, GenerateId(), ".png");     
      copyImageAsync(folder, name2, clientId); 
     } 


    } 

,所以原始圖像正在被新形象所取代。我爲每個基於那裏的路徑創建新的存儲文件,我確保我以前使用的所有文件流都是.disposed(),所以我有點失落,爲什麼我一直拒絕訪問。我得到它,如果我使用copyandreplace,如果我使用moveandreplace。

確切的錯誤代碼是System.UnauthorizedAccess - { 「訪問被拒絕(異常來自HRESULT:0X80070005(E_ACCESSDENIED))。」}

+0

你怎麼'originalPhotoImageStoragePath'?它的價值是什麼?您的應用可能沒有權限訪問它。 –

回答

0

我認爲,答案就在後發生了什麼保存,在Windows 8 Metro應用保存已拉開序幕,屏幕被轉變爲再次上市的所有客戶端另一個畫面:

因爲異步/等待被踢和保存圖像的過程已拉開序幕的任務,保存方法已定作業完成的承諾,該過程被踢回至UI過渡到一個新的屏幕上,在新的屏幕上再次顯示對圖像的請求,以便將列表中的客戶數據顯示出來。要檢索的任務看起來優先,並且在保存任務有機會完成將新圖像寫入文件之前鎖定舊圖像以供顯示。

那麼,什麼林看着做的是有一個在內存中的集合,具有圖像的對象。當一個CRUD操作已經由一個頁面拉開序幕,該頁面會調用該類型的一個REPOSITORY和回購將更新在內存中收集和也寫入文件。這樣我就可以讓頁面從內存集合中取出數據,而不是單獨的文件,這些文件可能已經或者可能未被更新,因爲它們已經被推送到後臺進程/任務。

0

由於this聯繫表明,它也許是一個功能選項啓用。查看「讀取本地文件w/o Picker」部分,它解釋瞭如何啓用文檔庫訪問。

注意的:

我可能會花一點時間來談論StorageFolder了。 我得到的最常見的請求之一是迭代用戶的 系統上的文件和文件夾。你真的不能 - 如果你的意思是從c:開始。嘗試 迭代到c:\,你會得到這樣的:[EXCEPTION]你可以,但是, 迭代庫中的文件(文檔,照片,音樂,視頻和 甚至家庭組)的文件夾 - 如果你已要求這能力在 清單。需要注意的是對於 文件夾返回的文件會被自動過濾,您在 您的清單申報的文件類型是很重要的。 (難道我已經提到不能聲明?)讓我 重申,作爲一個開發人員,你有一個像這樣 故意限制,最終提高用戶的體驗和安全性。

問候

+0

嘿,謝謝你,我已經讀過。但是我剛剛發現了什麼。是因爲異步等待正在踢,並且保存圖像的過程已被啓動到任務,保存方法已被賦予完成作業的承諾,並且該過程被踢回到過渡到新屏幕的UI上在新的屏幕上再次顯示圖像請求,以便在列表中顯示客戶端數據。要檢索的任務看起來優先,並且在保存任務有機會完成將新圖像寫入文件之前鎖定舊圖像以供顯示。 – chendricks850

+0

因此,我在做的是在內存中收集有圖像的對象。當CRUD操作被頁面啓動時,頁面將調用該TYPE的存儲庫,並且repo將更新內存集合並寫入文件。 這將允許我從內存集合中獲取數據,而不是單個文件,因爲這些文件已被推送到後臺進程/任務,所以可能會或可能沒有更新。 – chendricks850

相關問題