wp8 IsolatedStorageFileStream上不允许操作

时间:2014-03-04 18:08:19

标签: c# windows-phone-8 isolatedstorage sharpziplib isolatedstoragefile

我正在将所有图像从我的设备复制到目录。在复制图像时,我收到此错误在IsolatedStorageFileStream上不允许操作

这是我复制文件的代码。

MediaLibrary m = new MediaLibrary();
using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
{
  if (store.DirectoryExists("ImagesZipFolder"))
  {
     deleteFileFolder("ImagesZipFolder");
  }

  if (!store.DirectoryExists("ImagesZipFolder"))
  {
     store.CreateDirectory("ImagesZipFolder");

     foreach (var picture in m.Pictures)
     {
        using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(@"ImagesZipFolder/" + picture.Name, FileMode.CreateNew, store))
        {
            BitmapImage image = new BitmapImage();
            image.SetSource(picture.GetImage());

            byte[] bytes = ConvertToBytes(image);
            stream.Write(bytes, 0, bytes.Length); 
        }
     }
  }

}

这是我的 ConvertToBytes 方法。

    public byte[] ConvertToBytes(BitmapImage bitmapImage)
    {
        byte[] data = null;
        WriteableBitmap wBitmap = null;

        using (MemoryStream stream = new MemoryStream())
        {
            wBitmap = new WriteableBitmap(bitmapImage);
            wBitmap.SaveJpeg(stream, wBitmap.PixelWidth, wBitmap.PixelHeight, 0, 100);
            stream.Seek(0, SeekOrigin.Begin);
            //data = stream.GetBuffer();
            data = stream.ToArray();
            DisposeImage(bitmapImage);
            return data;
        }
    }

基本上我的目的是创建所有图片 zip文件。我的设备中有完整的 222 图片。那么我该如何解决这个问题呢?如何创建此图像的zip?

2 个答案:

答案 0 :(得分:0)

很可能这是由于对文件的并发访问 你可以参考链接: Operation not permitted on IsolatedStorageFileStream. error

答案 1 :(得分:0)

我检查了你的代码,它似乎正在工作(假设在DisposeImage()方法中没有错误)没有发生OperationNotPermittedException。但是,如果您的代码中存在错误,那么它只能是因为deleteFileFolder(“ImagesZipFolder”)行。你能给我一些片段,以便我可以进一步研究它。我发布了工作代码......我已用简单的预定义替换了该方法 -

  MediaLibrary m = new MediaLibrary();
    using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
    {
        if (store.DirectoryExists("ImagesZipFolder"))
        {

            store.DeleteDirectory("ImagesZipFolder");
        }

        if (!store.DirectoryExists("ImagesZipFolder"))
        {
            store.CreateDirectory("ImagesZipFolder");

            foreach (var picture in m.Pictures)
            {
                using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(@"ImagesZipFolder/" + picture.Name, FileMode.CreateNew, store))
                {
                    BitmapImage image = new BitmapImage();
                    image.SetSource(picture.GetImage());

                    byte[] bytes = ConvertToBytes(image);
                    stream.Write(bytes, 0, bytes.Length);
                }
            }
        }
    }