2016-04-03 9 views
1

Ich habe eine Codezeile, die ein Objekt IsolatedStorageFile erstellt.IsolatedStorage ist verloren, wenn die ausführbare Datei in einen anderen Ordner verschoben wird

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

Es funktioniert großartig und hält Daten zwischen Ausführungen wie ich es will, aber wenn ich meine exe in einem anderen Ordner zu verschieben, ist es nicht die gleiche Speicherstelle erhalten. Ich kann die exe zurück in den ursprünglichen Ordner verschieben, und alle Daten sind wieder verfügbar.

Wie kann ich die IsolatedStoreFile initialisieren, so dass es immer den gleichen Speicherort erhält, egal in welchem ​​Ordner sich die exe befindet?

aktualisieren: In der documentation für dieses .GetStore ist besagt, dass

null lässt das IsolatedStorage Objekt den Beweis wählen.

Offensichtlich verwendet null die URL der exe als Beweis.
Wie kann ich es zwingen, etwas anderes zu verwenden?

Hier ist der Artikel, den ich verwenden, um das lernen: DeveloperFusion

+0

Haben Sie diesen Beitrag angesehen? http://stackoverflow.com/questions/1112681/can-i-get-a-path-for-a-isolatedstorage-file-and-read-it-from-external-applicatio –

+0

@Steve Ich habe nicht, aber Wie kann ich das benutzen? – 4castle

+0

Ich habe eine Antwort geschrieben. –

Antwort

1

Sie den Pfad zur Isolierte Storageg Datei speichern kann.

Mit dem unten stehenden Code habe ich eine Datei mit Text erstellt und dann zurückgelesen. Ich habe dann den Pfad zur Datei in den Code 'hartcodiert' (nur für Demozwecke!).

Ich zog die exe und lief es. Ich klickte auf die Schaltfläche, die den fest codierten Pfad zugewiesen hatte und konnte die Datei lesen.

Es ist Butt-hässlich, aber es funktioniert.

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); 
} 
+0

Danke für Ihre Hilfe! Dies könnte funktionieren, aber wie kann ich den Pfad speichern, wenn ich den isolierten Speicher nicht verwenden kann? – 4castle

+0

Sie sollten in der Lage sein, den Pfad in App-Einstellungen ... oder der Registrierung zu setzen ... –

-1

Erstellen Sie eine Verknüpfung zu dem exe und dass um stattdessen bewegen.

+0

Ein Freund von mir empfahl dies, also schließe ich es hier, damit andere es sehen können. Es ist nicht die Lösung, die ich möchte. – 4castle