关于c#:使用隔离存储时”找不到文件”

关于c#:使用隔离存储时”找不到文件”

“Could not find file” when using Isolated Storage

我将内容保存在一个独立存储文件中(使用类IsolatedStorageFile)。它运作良好,当我从GUI层调用DAL层中的保存和检索方法时,可以检索保存的值。但是,当我尝试从同一项目中的另一个程序集检索相同的设置时,它给了我FileNotFoundException。我做错了什么?这是一般概念:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    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应用程序,否则似乎不可能使用隔离存储。


实例化IsolatedStorageFile时,是否将其范围限制为IsolatedStorageScope.Machine?

好,现在您已经说明了代码风格,而我又回到了重新测试方法的行为的地方,这里是解释:

  • GetMachineStoreForAssembly()-范围限于机器和程序集标识。同一应用程序中的不同程序集将具有自己的隔离存储。
  • GetMachineStoreForDomain()-我认为是一个不当用语。范围仅限于计算机,而域标识位于程序集标识之上。应该只为AppDomain提供一个选项。
  • GetMachineStoreForApplication()-这是您要寻找的。我已经对其进行了测试,并且不同的程序集可以获取在另一个程序集中编写的值。唯一的问题是,应用程序身份必须是可验证的。在本地运行时,无法正确确定它,并且最终会出现异常"无法确定调用者的应用程序身份"。可以通过单击一次部署应用程序来进行验证。只有这样,该方法才能应用并达到共享隔离存储的预期效果。

保存时,您将调用GetMachineStoreForDomain,而检索时,您将调用GetMachineStoreForAssembly。

GetMachineStoreForAssembly的范围是执行代码的程序集,而GetMachineStoreForDomain的范围是当前运行的AppDomain和执行代码的程序集。只需将这些调用更改为GetMachineStoreForApplication,它就可以正常工作。

IsolatedStorageFile的文档可以在http://msdn.microsoft.com/zh-cn/library/system.io.isolatedstorage.isolatedstoragefile_members.aspx

中找到


推荐阅读

    linux复制命令文件?

    linux复制命令文件?,系统,文件,命令,目录,基本知识,源文件,目标,文件夹,路

    linux下文件均分命令?

    linux下文件均分命令?,管理,情况,系统,工作,信息,地址,命令,目录,单位,设备,L

    linux查文件数量命令?

    linux查文件数量命令?,系统,数据,电脑,命令,文件,信息,代码,对比,软件,第三,l

    linux命令去重文件?

    linux命令去重文件?,系统,工作,命令,信息,数据,环境,代码,文件,目录,操作,Lin

    linux匹配文件名命令?

    linux匹配文件名命令?,系统,时间,发行,位置,工具,软件,名称,盘后,电脑,盘中,l

    改文件名linux命令?

    改文件名linux命令?,名字,软件,文件,命令,位置,系统,文件名,目录,指令,方面,l

    linux命令文件加锁?

    linux命令文件加锁?,数据,密码,系统,设备,代码,地址,名单,信息,数字,统一,请

    linux拼接文件命令?

    linux拼接文件命令?,文件,数据,命令,代码,时间,信息,系统,情况,管理,标准,Lin

    linux文件常用命令?

    linux文件常用命令?,工作,地址,信息,系统,命令,目录,标准,情况,管理,常用命

    文件写入linux命令?

    文件写入linux命令?,文件,命令,状态,系统,名称,时间,首次,数据,数字,内容,在l

    linux命令写满文件?

    linux命令写满文件?,地址,工作,命令,系统,管理,文件,目录,标准,电脑,信息,Lin

    文件夹排序linux命令?

    文件夹排序linux命令?,系统,数字,信息,工作,时间,命令,管理,设备,单位,工具,

    linux外部命令调用?

    linux外部命令调用?,系统,软件,标准,命令,盘中,管理,外部,进程,程序,内存,lin

    linux打开文件夹命令?

    linux打开文件夹命令?,工作,系统,信息,命令,图片,文件,管理,发行,名字,名称,

    linux上清空文件命令?

    linux上清空文件命令?,系统,命令,文件夹,名字,档案,文件,目录,方法,终端,指

    linux中历史命令文件?

    linux中历史命令文件?,系统,地址,信息,数字,时间,命令,数据,环境,历史,文件,l

    linux怎么调用命令行?

    linux怎么调用命令行?,系统,地址,工具,工作,首页,终端,命令,密码,信息,情况,l

    linux命令拷贝文件?

    linux命令拷贝文件?,系统,文件,命令,目录,情况,源文件,目标,文件夹,选项,语

    linux比对文件命令?

    linux比对文件命令?,系统,对比,第一,管理,工作,命令,文件,网络,名称,标准,lin

    linux命令被替换文件?

    linux命令被替换文件?,系统,文件,命令,批量,工具,电脑,工作,保险,实时,字符