diff --git a/src/onedrive.d b/src/onedrive.d index 14f96ab3..032aa033 100644 --- a/src/onedrive.d +++ b/src/onedrive.d @@ -123,10 +123,14 @@ final class OneDriveApi void downloadById(const(char)[] id, string saveToPath) { checkAccessTokenExpired(); + import std.file; scope(failure) { - import std.file; if (exists(saveToPath)) remove(saveToPath); } + // mkdir if need, or File(saveToPath, "wb") may fail + if ( !exists(dirName(saveToPath)) ) { + mkdirRecurse(dirName(saveToPath)); + } const(char)[] url = itemByIdUrl ~ id ~ "/content?AVOverride=1"; download(url, saveToPath); } diff --git a/src/sync.d b/src/sync.d index 5f12767f..556e65b6 100644 --- a/src/sync.d +++ b/src/sync.d @@ -281,8 +281,9 @@ final class SyncEngine break; case ItemType.dir: log.log("Creating directory: ", path); - mkdir(path); - break; + //Use mkdirRecuse to deal nested dir + mkdirRecurse(path); + break; case ItemType.remote: assert(0); }