从隔离存储中删除文件无效。

时间:2011-07-31 06:39:59

标签: c# visual-studio-2010 windows-phone-7 isolatedstorage

目录已按照LoadFiles方法中的指示进行了映射。但是,删除代码无法从隔离存储中的目录中删除文件,即使它已被映射。

这是LoadFile方法:

 private ObservableCollection<FileItem> _files;
        public ObservableCollection<FileItem> Files
        {
            get
            {
                this._files = this._files ?? this.LoadFiles();
                return this._files;
            }
        }


        private ObservableCollection<FileItem> LoadFiles()
        {
            ObservableCollection<FileItem> files = new ObservableCollection<FileItem>();


            foreach (string filePath in this.Store.GetFileNames("FlashCardApp\\"))
                files.Add(new FileItem { FileName = filePath });
            return files;
        }

这是删除代码,它假定在检查后从目录中删除文件,但即使store.FileExist已经映射到LoadFiles方法,也无法执行此操作:

  private void OnDeleteSelected()
        {
            IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
            List<FileItem> removedItems = new List<FileItem>();
            foreach (var item in Files)
            {
                if (item.IsChecked)
                    if (storage.FileExists(item.FileName))
                    {
                        storage.DeleteFile(item.FileName);
                        removedItems.Add(item);
                    }
            }

            foreach (var item in removedItems)
                Files.Remove(item);
        }

编辑:

以下是隔离存储类:

  private IsolatedStorageFile currentStore;
        public IsolatedStorageFile Store
        {
            get
            {
                this.currentStore = this.currentStore ?? IsolatedStorageFile.GetUserStoreForApplication();
                return this.currentStore;
            }
        }

1 个答案:

答案 0 :(得分:3)

在第一个代码片段中,您正在使用它.Store用于访问IsolatedStorage,在第二个代码片段中,您指的是IsolatedStorageFile.GetUserStoreForApplication();这些都指向同一个位置吗?

另外,在第二个代码片段中,storage.FileExists(item.FileName)是否返回true?或者你需要将“FlashCardApp”附加到文件名?例如:storage.FileExists("FlashCardApp\\" + item.FileName);