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<StorageFolder>.</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<List<System.String>>.</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.
Soll der Ordner ausschließlich aus einer Zeichenfolge angegeben werden? – GeorgeChond
@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