Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 第二次尝试将照片保存到同一文件时发生UnauthorizedAccessException_C#_Windows 8 - Fatal编程技术网

C# 第二次尝试将照片保存到同一文件时发生UnauthorizedAccessException

C# 第二次尝试将照片保存到同一文件时发生UnauthorizedAccessException,c#,windows-8,C#,Windows 8,下面的代码允许我拍照。然后我显示图片。我的XAML绑定到Vehicle对象的Photo属性。它很好用,直到我进去试着再拍一张照片。然后我得到一个未经授权的访问异常。我在“LocalStorage”中创建了该文件,因此我不认为我需要特殊权限才能在那里写入文件。我不确定是什么导致了这个错误 public async Task TakePicture() { CameraCaptureUI camera = new CameraCaptureUI(); came

下面的代码允许我拍照。然后我显示图片。我的XAML绑定到
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
属性的
图像
。该车辆的等级与上述代码相同。在使其正常工作后,我将经历保存
车辆的过程
,以便稍后调用该文件,但我还没有做到这一点。