在IsolatedStorageFileStream上执行的操作不允许错误。

4

当我尝试将文件内容保存在文件流fs中时,它会给出“在IsolatedStorageFileStream上不允许执行操作”的错误。

var appStorage = IsolatedStorageFile.GetUserStoreForApplication();
string[] fileList = appStorage.GetFileNames();

foreach (string fileName in fileList)
    {
       using (var file = appStorage.OpenFile(fileName, FileMode.Open))
       {
           if (fileName != "__ApplicationSettings")
           {
               var fs = new IsolatedStorageFileStream(fileName, FileMode.Open, FileAccess.Read, appStorage);
               string abc = fs.ToString();
               meTextBlock.Text = abc;
               //MemoryStream ms = appStorage.OpenFile(fileName, FileMode.Open, FileAccess.Read);

               clientUpload.UploadAsync(SkyDriveFolderId, fileName, fs);
          }
     }
}
3个回答

4

为什么你添加了内部的using (var file = appStorage.OpenFile(fileName, FileMode.Open))

看起来问题在于你正在打开一个用于读取文件的流,然后又打开了另一个流,而没有关闭先前的那个流!

如果你删除那一行(似乎在那里没有做任何事情),它应该可以正常工作。

哦,fs.ToString()只会得到类型名称,而不是文件内容;要读取文件,请使用StreamReaderfs


1
哇!非常感谢Pedro Lamas。问题出在using (var file = appStorage.OpenFile(fileName, FileMode.Open))上。 - a_rahmanshah
谢谢!我遇到了同样的问题,你解决了它!在开始使用另一个文件流之前,我必须关闭当前的文件流。 - NadaNK

1

当一个隔离存储文件被一个流(或读取器等)打开,并且在第一个流(或读取器等)尚未放弃该文件的情况下,另一个对象正在访问该文件时,就会经常出现此错误。仔细检查您访问隔离存储文件的所有位置的代码,并确保在其他内容访问它之前关闭每个文件。对于这种特殊情况,Pedro Lamas是正确的,我只是想提供一些一般性的反馈。如果您在谷歌上搜索“IsolatedStorageFileStream错误上的操作不允许”的问题和答案,您将看到这种趋势。虽然错误消息可能更具描述性。


0

尝试这种方法

using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    if (IsolatedStorageFile.IsEnabled)
                    {
                        if (isf.FileExists(localFileName))
                        {
                            using (var isfs = new IsolatedStorageFileStream(localFileName, FileMode.Open, isf))
                            {
                                using (var sr = new StreamReader(isfs))
                                {
                                    var data = sr.ReadToEnd();
                                    if (data != null)
                                    {
                                       ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接