Hier ist eine Erweiterungsmethode, die überprüft, ob ein Ordner erstellt wurde und:
- Wenn erstellt, gibt die Ordner-ID zurück.
- Wenn nicht erstellt, erstellt es den Ordner und gibt die Ordner-ID zurück.
Dann können Sie diese ID verwenden, um in diesen Ordner hoch- oder herunterzuladen.
public async static Task CreateDirectoryAsync(this LiveConnectClient client,
string folderName, string parentFolder)
{
string folderId = null;
// Ruft alle Verzeichnisse ab.
var queryFolder = parentFolder + "/files?filter=folders,albums";
var opResult = await client.GetAsync(queryFolder);
dynamic result = opResult.Result;
foreach (dynamic folder in result.data)
{
// Überprüft, ob der aktuelle Ordner den übergebenen Namen hat.
if (folder.name.ToLowerInvariant() == folderName.ToLowerInvariant())
{
folderId = folder.id;
break;
}
}
if (folderId == null)
{
// Verzeichnis wurde nicht gefunden, also wird es mit der PostAsync-Methode erstellt.
var folderData = new Dictionary();
folderData.Add("name", folderName);
opResult = await client.PostAsync(parentFolder, folderData);
result = opResult.Result;
// Ruft die ID des erstellten Ordners ab.
folderId = result.id;
}
return folderId;
}
Sie können dies dann verwenden als:
string skyDriveFolder = await CreateDirectoryAsync(liveConnectClient, "", "me/skydrive");
Jetzt hat skyDriveFolder die Ordner-ID, die Sie beim Hochladen und Herunterladen verwenden können. Hier ist ein Beispiel für das Hochladen:
LiveOperationResult result = await liveConnectClient.UploadAsync(skyDriveFolder, Dateiname,
DateiStream, OverwriteOption.Overwrite);
ZUSATZ ZUR VOLLSTÄNDIGUNG DER ANTWORT VON YnotDraw
Unter Verwendung dessen, was Sie bereitgestellt haben, hier ist, wie Sie eine Textdatei herunterladen, indem Sie den Dateinamen angeben. Im Folgenden wird nicht darauf eingegangen, ob die Datei nicht gefunden wird und auf andere potenzielle Ausnahmen, aber hier ist, was funktioniert, wenn alles richtig zusammenpasst:
public async static Task DownloadFileAsync(this LiveConnectClient client, string directory, string fileName)
{
string skyDriveFolder = await OneDriveHelper.CreateOrGetDirectoryAsync(client, directory, "me/skydrive");
var result = await client.DownloadAsync(skyDriveFolder);
var operation = await client.GetAsync(skyDriveFolder + "/files");
var items = operation.Result["data"] as List;
string id = string.Empty;
// Suche nach der Datei - hier wird Handling hinzugefügt, wenn die Datei nicht gefunden wird
foreach (object item in items)
{
IDictionary file = item as IDictionary;
if (file["name"].ToString() == fileName)
{
id = file["id"].ToString();
break;
}
}
var downloadResult= await client.DownloadAsync(string.Format("{0}/content", id));
var reader = new StreamReader(downloadResult.Stream);
string text = await reader.ReadToEndAsync();
return text;
}
Und in der Verwendung:
var result = await DownloadFile(_client, "MeinOrdner", "backup.txt");