C# 第二次尝试将照片保存到同一文件时发生UnauthorizedAccessException
下面的代码允许我拍照。然后我显示图片。我的XAML绑定到C# 第二次尝试将照片保存到同一文件时发生UnauthorizedAccessException,c#,windows-8,C#,Windows 8,下面的代码允许我拍照。然后我显示图片。我的XAML绑定到Vehicle对象的Photo属性。它很好用,直到我进去试着再拍一张照片。然后我得到一个未经授权的访问异常。我在“LocalStorage”中创建了该文件,因此我不认为我需要特殊权限才能在那里写入文件。我不确定是什么导致了这个错误 public async Task TakePicture() { CameraCaptureUI camera = new CameraCaptureUI(); came
Vehicle
对象的Photo
属性。它很好用,直到我进去试着再拍一张照片。然后我得到一个未经授权的访问异常
。我在“LocalStorage”中创建了该文件,因此我不认为我需要特殊权限才能在那里写入文件。我不确定是什么导致了这个错误
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);
}
}
}
我假设
StoragePhoto
将某种类型的文件I/O封装在引擎盖下。您必须正确地处理这些对象,以便释放将“挂钩”保留在文件中的底层非托管操作系统资源。如果您不处理它们,应用程序将保持对文件的访问打开,这可能就是为什么您对文件的第二次访问会出现异常(第一次访问仍然保持)。向我展示StoragePhoto代码,我可以获得更具体的信息
另一方面,如果此应用程序是多线程的,则应围绕将文件写入磁盘创建粒度信号量/锁(可能通过插入物理路径字符串并锁定该引用),以确保不会同时尝试将同一文件写入同一物理路径的磁盘-这将是不好的。实际上,在这一点上,这就是全部。我有一个绑定到
Vehicle.Photo
属性的图像
。该车辆的等级与上述代码相同。在使其正常工作后,我将经历保存车辆的过程
,以便稍后调用该文件,但我还没有做到这一点。