在IsolatedStorageFileStream错误上不允许操作

时间:2012-04-17 23:52:48

标签: c# silverlight windows-phone-7

当我尝试在fileStream fs中保存文件内容时出现operation not permitted on 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 个答案:

答案 0 :(得分:4)

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

在我看来问题是你打开一个流来读取文件,然后打开另一个文件,而不关闭前一个文件!

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

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

答案 1 :(得分:1)

当一个流(或读取器或其他)打开一个独立的存储文件时,此错误始终发生,并且当第一个流(或读取器或其他)尚未放弃该文件时,另一个对象正在访问该错误。在访问独立存储文件的所有位置仔细检查代码,并确保在访问其他内容之前关闭每个文件。佩德罗喇嘛对于这个特殊情况是正确的,我只是想提供一些一般性的反馈。如果您搜索谷歌搜索“不允许在IsolatedStorageFileStream上运行错误”的问题和答案,您将看到趋势。但错误信息可能更具描述性。

答案 2 :(得分: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)
                                    {
                                       ...