2013-06-28 40 views
1

因此,下面的代碼允許我拍攝照片。然後我顯示圖片。我的XAML綁定到Vehicle對象的Photo屬性。它工作正常,直到我進入並嘗試再次拍照。然後我得到一個UnauthorizedAccessException。我在'LocalStorage'中創建了這個文件,所以我不相信我需要特殊的權限才能在那裏寫文件。我不確定是什麼導致了錯誤。UnauthorizedAccessException嘗試再次將照片保存到同一個文件時

public async Task TakePicture() 
    { 
     CameraCaptureUI camera = new CameraCaptureUI(); 
     camera.PhotoSettings.CroppedAspectRatio = new Size(16, 9); 
     StorageFile photo = await camera.CaptureFileAsync(CameraCaptureUIMode.Photo); 

     if (photo != null) 
     { 
      var targetFolder = ApplicationData.Current.LocalFolder; 
      var targetFile = await targetFolder.CreateFileAsync(String.Format 
       ("VehiclePhoto{0}.jpg", this.Vehicle.PrimaryKey), CreationCollisionOption.ReplaceExisting); 
      if (targetFile != null) 
      { 
       await photo.MoveAndReplaceAsync(targetFile); 
       this.Vehicle.Photo = String.Format("ms-appdata:///local/VehiclePhoto{0}.jpg", this.Vehicle.PrimaryKey); 
      } 
     } 
    } 

回答

2

我假設StoragePhoto封裝了某種文件I/O在引擎蓋下。您必須妥善處理這些對象,以釋放底層非託管操作系統資源,這些資源會將「掛鉤」保留在文件中。如果你不處理它們,應用程序將保持打開文件的訪問權限,這可能是爲什麼你第二次訪問該文件會給你一個例外(第一次訪問仍然存在)。向我展示StoragePhoto代碼,並且可以獲得更具體的內容。

另一方面,如果這個應用程序是多線程的,你應該圍繞寫入文件到磁盤創建粒度信號量/鎖定(可能是通過實體路徑字符串並鎖定該引用)來確保你不嘗試將同一個文件同時寫入同一物理路徑上的磁盤 - 這會很糟糕。

+0

實際上,在這一點上,這就是全部。我有一個'Image',綁定到'Vehicle.Photo'屬性。該車輛與上述代碼處於同一班級。在開始工作之後,我將要完成保存'Vehicle'的過程,以便稍後可以調用該文件,但是我還沒有到達那個位置。 – s3kt0r

相關問題