2016-10-19 1 views
0

Ich entwickle eine Anwendung für UWP nur für den Desktop. Ein Benutzer kann in einer Einstellungsseite auswählen, wo er einige Dateien und Ordner erstellen möchte. Normalerweise habe ich StreamWriter mag:UWP Schreiben (und lesen) Datei in einem (von) Ordner aus einer Zeichenfolge

using (System.IO.StreamWriter file = new System.IO.StreamWriter(path)) { 
    file.WriteLine("Something"); 
} 

Ich habe versucht jetzt verwenden StorageFolder

StorageFolder folder = ApplicationData.Current.LocalFolder; 

aber ich kann nicht einen Weg geben Sie einen Ordner aus einem String wie C:\MyFolder finden.

Vielen Dank im Voraus.

+0

Soll der Ordner ausschließlich aus einer Zeichenfolge angegeben werden? – GeorgeChond

+0

@GeorgeChond Ja. Im Wesentlichen erstellt die Anwendung einige Dateien, die ein Benutzer in einem Banksystem aus einem bestimmten Ordner hochladen muss. Was schlägst du auch vor? Ich weiß, dass ich eine normale Windows-App verwenden könnte, aber ich möchte mehr über UWP erfahren. – Enrico

Antwort

1

Leider ist es im Moment nicht möglich, die Interaktion mit dem Benutzer zu vermeiden. Aus meiner Sicht ist das ziemlich merkwürdig, aber das ist es.

Wenn dann ein Benutzer einen Ordner ausgewählt hat, können alle Anwendungen daran arbeiten. Die Dokumentation ist nicht sehr klar darüber, wie wir alle Funktionalitäten nutzen können. Im folgenden Code finden Sie ein Beispiel, wie Sie das implementieren können. Bitte, wenn der Code falsch ist oder ich kann es verbessern, sag es mir.

/// <summary> 
/// Picks a folder. 
/// </summary> 
public async void PickFolder() { 
    var folderPicker = new Windows.Storage.Pickers.FolderPicker(); 
    folderPicker.SuggestedStartLocation = 
     Windows.Storage.Pickers.PickerLocationId.Desktop; 

    // unless you want to open a folder, FileTypeFilter is required 
    folderPicker.FileTypeFilter.Add(".cs"); 
    folderPicker.FileTypeFilter.Add(".jpg"); 

    Windows.Storage.StorageFolder folder = await folderPicker.PickSingleFolderAsync(); 
    if (folder != null) { 
     // Application now has read/write access to all contents in the picked folder 
     // (including other sub-folder contents) 
     Windows.Storage.AccessCache.StorageApplicationPermissions. 
      FutureAccessList.AddOrReplace("PickedFolderToken", folder); 

     StorageFolder mainFolder = await folder.CreateFolderAsync("Generator"); 
     await mainFolder.CreateFolderAsync("Code"); 
     await mainFolder.CreateFolderAsync("EventsArgs"); 

     StorageFolder newFolder = 
        await CreateFileInANewFolder(mainFolder, "MyFolder", "MyCode.cs", 
         new List<string>() { "My code line 1", "My code line 2" }); 
     List<string> fileLines = await ReadFile(newFolder, "MyCode.cs"); 

     StorageFile file = 
      await mainFolder.CreateFileAsync("Code.cs", 
              CreationCollisionOption.ReplaceExisting); 
     List<string> lines = new List<string>() { 
       "Hello world!", "This is a second line" 
     }; 

     await FileIO.WriteLinesAsync(file, lines); 
    } 
    else { 
     // the user didn't select any folder 
    } 
} 

Eine andere Funktion empfängt die Ordnerreferenz und erstellt einen Ordner und eine Datei.

/// <summary> 
/// Creates the file in a new folder. 
/// </summary> 
/// <param name="folder">The folder.</param> 
/// <param name="newFolder">The new folder.</param> 
/// <param name="filename">The filename.</param> 
/// <param name="lineContent">Content of the line.</param> 
/// <returns>Task&lt;StorageFolder&gt;.</returns> 
public async Task<StorageFolder> CreateFileInANewFolder(
    StorageFolder folder, string newFolder, string filename, List<string> lineContent) { 
    StorageFolder myFolder = await folder.CreateFolderAsync(newFolder); 
    StorageFile file = await myFolder.CreateFileAsync(filename, 
         CreationCollisionOption.ReplaceExisting); 
    await FileIO.WriteLinesAsync(file, lineContent); 

    return myFolder; 
} 

Diese Funktion liest eine Datei aus einem Ordner.

/// <summary> 
/// Reads the file. 
/// </summary> 
/// <param name="folder">The folder.</param> 
/// <param name="filename">The filename.</param> 
/// <returns>Task&lt;List&lt;System.String&gt;&gt;.</returns> 
public async Task<List<string>> ReadFile(StorageFolder folder, string filename) { 
    StorageFile file = await folder.GetFileAsync(filename); 
    IList<string> lines = await FileIO.ReadLinesAsync(file); 
    return lines.ToList(); 
} 

Dazu müssen Sie die folgenden using hinzufügen:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using Windows.Storage; 
using Windows.UI.Xaml.Controls; 

Wenn ein Benutzer einen Ordner mit PickFolder diese Funktion unter einen Ordner Generator und unter, dass andere zwei Ordner namens Code und EventsArgs genannt schafft ausgewählt.

Dann ruft es CreateFileInANewFolder. Diese Funktion hat als Parameter die StorageFolder für den ausgewählten Ordner und diese Funktion erstellt einen neuen Ordner und darunter eine neue Datei.

ReadFile liest die mit CreateFileInANewFolder erstellte Datei und gibt die Zeilen zurück.

Ich hoffe, dieses Beispiel kann jemandem helfen.

2

Sie können den Benutzer den gewünschten Ordner mit der Klasse FolderPicker angeben lassen.

var folderPicker = new Windows.Storage.Pickers.FolderPicker(); 
folderPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop; 
Windows.Storage.StorageFolder folder = await folderPicker.PickSingleFolderAsync(); 
if (folder != null) 
{ 
    // Application now has read/write access to all contents in the picked folder 
    // (including other sub-folder contents) 
    Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.AddOrReplace("PickedFolderToken", folder); 

    //<<Here, you can write your files in the selected folder.>> 

} 
else 
{ 
    //Operation cancelled. 
} 

Weitere Informationen zur Verwendung finden Sie unter here.

Verwandte Themen