不允许对隔离存储文件流错误进行操作
本文关键字:操作 错误 隔离 存储文件 不允许 | 更新日期: 2023-09-27 18:31:30
当我尝试将文件的内容保存在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);
}
}
}
为什么要添加内部using (var file = appStorage.OpenFile(fileName, FileMode.Open))
?
在我看来,问题是您正在打开一个流来读取文件,然后打开另一个流,而没有关闭前一个流!
如果您删除该行(似乎没有在那里做任何事情),它应该可以正常工作。
哦,fs.ToString()
只会给你类型名称,而不是文件内容;要读取文件,请使用带有fs
的StreamReader
。
当一个流(或读取器或其他)打开独立存储文件并且正在由另一个对象访问而第一个流(或读取器或其他)尚未放弃该文件时,此错误始终发生。在访问独立存储文件的所有位置仔细检查代码,并确保在其他人访问每个文件之前关闭每个文件。佩德罗·拉马斯(Pedro Lamas)对这种特殊情况是正确的,我只是想提供一些一般性的反馈。如果您在谷歌上搜索"IsolatedStorageFileStream错误不允许操作"的问题和答案,您将看到趋势。不过,错误消息可能更具描述性。
试试这种方法
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)
{
...