当可执行文件移动到另一个文件夹时,IsolatedStorage会丢失

时间:2016-04-03 15:10:00

标签: c# .net directory exe isolatedstorage

我有一行代码可以创建IsolatedStorageFile对象。

IsolatedStorageFile isoFile = IsolatedStorageFile.GetStore(
                    IsolatedStorageScope.Roaming
                    | IsolatedStorageScope.User
                    | IsolatedStorageScope.Assembly,
                    null, null);

它很好用,并且可以按照我的要求在执行之间保留数据,但是当我将exe移动到其他文件夹时,它不会收到相同的存储位置。我可以将exe移回原始文件夹,所有数据都可以再次使用。

如何初始化IsolatedStoreFile,以便无论exe位于哪个文件夹,它始终都会获得相同的存储位置?

更新:在此.GetStore的{​​{3}}中指出

  

null 让IsolatedStorage对象选择证据。

显然,null使用exe的网址作为证据 我如何强迫它使用其他东西?

以下是我过去常常了解的文章:documentation

2 个答案:

答案 0 :(得分:1)

您可以存储隔离存储文件的路径。

使用下面的代码,我创建了一个包含文本的文件,然后将其读回。 然后,我硬编码'文件到代码的路径(仅用于演示目的!)。

我移动了exe并运行它。我点击了分配了硬编码路径的按钮,并且能够读取文件。

这很丑陋但是有效。

string path;
private void button1_Click(object sender, EventArgs e)
{
    // Create a file in isolated storage.
    IsolatedStorageFile store = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
    IsolatedStorageFileStream stream = new IsolatedStorageFileStream("test.txt", FileMode.Create, store);

    StreamWriter writer = new StreamWriter(stream);
    writer.WriteLine("Hello");
    writer.Close();
    stream.Close();
    // Retrieve the actual path of the file using reflection.
    path = stream.GetType().GetField("m_FullPath", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(stream).ToString();
    MessageBox.Show("Created File:" + path);
}

private void button3_Click(object sender, EventArgs e)
{
    // Hardcoded? Yech, You should store this info somewhere
    path = @"C:\Users\xxxxxx\AppData\Local\IsolatedStorage\xzzzo1dc.wni\4xhaqngq.5jl\Url.snvxh15wown3vm2muv25oq55wafnfhxw\AssemFiles\test.txt";
}


private void button2_Click(object sender, EventArgs e)
{
    String Text = File.ReadAllText(path);

    MessageBox.Show("read storage: " + Text);
}

答案 1 :(得分:-1)

创建exe的快捷方式,然后移动