我将内容保存在Isolated Storage文件中(使用类IsolatedStorageFile)。它运行良好,我可以从GUI层调用DAL图层中的保存和检索方法时检索保存的值。但是,当我尝试从同一项目中的另一个程序集中检索相同的设置时,它会给我一个FileNotFoundException。我做错了什么?这是一般概念:
public void Save(int number)
{
IsolatedStorageFile storage = IsolatedStorageFile.GetMachineStoreForAssembly();
IsolatedStorageFileStream fileStream =
new IsolatedStorageFileStream(filename, FileMode.OpenOrCreate, storage);
StreamWriter writer = new StreamWriter(fileStream);
writer.WriteLine(number);
writer.Close();
}
public int Retrieve()
{
IsolatedStorageFile storage = IsolatedStorageFile.GetMachineStoreForAssembly();
IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(filename, FileMode.Open, storage);
StreamReader reader = new StreamReader(fileStream);
int number;
try
{
string line = reader.ReadLine();
number = int.Parse(line);
}
finally
{
reader.Close();
}
return number;
}
我尝试过使用所有GetMachineStoreFor *范围。
编辑:由于我需要多个程序集来访问文件,因此除非它是ClickOnce应用程序,否则它似乎不可能与隔离存储一起使用。
答案 0 :(得分:4)
当您实例化IsolatedStorageFile时,您是否将其范围限定为IsolatedStorageScope.Machine?
好了,现在你已经说明了你的代码风格,我已经回去重新测试方法的行为,这里有解释:
答案 1 :(得分:1)
保存时,您正在调用GetMachineStoreForDomain,但在检索时,您正在调用GetMachineStoreForAssembly。
GetMachineStoreForAssembly的范围限定为执行代码的程序集,而GetMachineStoreForDomain的范围限定为当前运行的AppDomain和执行代码的程序集。只需将这些调用更改为GetMachineStoreForApplication,它就可以正常工作。
可以在http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragefile_members.aspx
找到IsolatedStorageFile的文档