/// <summary> /// Загрузка файла или директории с файлами и папками /// </summary> /// <param name="Patch">Путь к файлу или директории</param> /// <param name="Password">Пароль для шифрования</param> /// <param name="MaxFilesUpload">Максимальное число одновременно загружающихся частей файла</param> /// <param name="massenge">Метод для логирования</param> /// <returns></returns> public string UploadFolder(string Patch, string Password = null, byte MaxFilesUpload = 1, FunctionAndSetting.Massenge massenge = null) { BdDirectory Bd = new BdDirectory { UploadetFiles = new List <OneElemSaveDir>(0) }; UploadFile uploadFile = new UploadFile(ref functionAndSetting); TemporaryFileInfoSaved = Path.Combine(Patch, Path.GetFileName(Patch) + FunctionAndSetting.ExpansionUploadDirectory); if (File.Exists(TemporaryFileInfoSaved)) { string[] res = File.ReadAllText(TemporaryFileInfoSaved).Split("\r\n"); for (long i = 1; i < res.LongLength; i++) { Bd.UploadetFiles.Add(JsonConvert.DeserializeObject <OneElemSaveDir>(res[i])); } } else { File.WriteAllText(TemporaryFileInfoSaved, null); } string[] PatchSaves = GetFilesFolders(Patch).ToArray(); foreach (var Elem in PatchSaves) { if (!CheckPartList(Bd.UploadetFiles, Path.GetFullPath(Elem).Replace(Path.GetFullPath(Patch), null))) { if (File.Exists(Elem)) { OneElemSaveDir oneElem = new OneElemSaveDir { SaveDirectory = Path.GetFullPath(Elem).Replace(Path.GetFullPath(Patch), null), Password = random.Next(int.MinValue, int.MaxValue).ToString() }; oneElem.ResulUploadFileInfo = uploadFile.UploadFileHendler(Elem, MaxFilesUpload, oneElem.Password, massenge); Bd.UploadetFiles.Add(oneElem); restAddDat : try { File.AppendAllText(TemporaryFileInfoSaved, "\r\n" + JsonConvert.SerializeObject(oneElem)); } catch { goto restAddDat; } } else if (Directory.Exists(Elem) && Directory.GetDirectories(Elem).Length <= 0) { Bd.UploadetFiles.Add(new OneElemSaveDir { SaveDirectory = Path.GetFullPath(Elem).Replace(Path.GetFullPath(Patch), null) }); } } } File.Delete(TemporaryFileInfoSaved); return(functionAndSetting.Upload(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(Bd)), "info.txt")); }
public void Download(string Patch, string UrlFile, string Password = null, byte MaxFilesUpload = 1, FunctionAndSetting.Massenge massenge = null) { if (!Directory.Exists(Patch)) { if (massenge != null) { massenge.Invoke("[-] Неправильно указан путь к директории\r\n", ConsoleColor.Red); } return; } // Качаем главный файл try { BdDirectory bdDirectory = JsonConvert.DeserializeObject <BdDirectory>(Encoding.UTF8.GetString(functionAndSetting.DeCompress(functionAndSetting.Download(UrlFile), Password))); if (bdDirectory.UploadetFiles.Count <= 0) { if (massenge != null) { massenge.Invoke("[Error] Ошибка получения главного файла", ConsoleColor.Red); } return; } else { TemporaryFileInfoSaved = Path.Combine(Patch, functionAndSetting.GetKeyFile(UrlFile) + FunctionAndSetting.ExpansionDownloadDirectory); List <string> maskDownload = new List <string>(0); if (File.Exists(TemporaryFileInfoSaved)) { string[] res = File.ReadAllText(TemporaryFileInfoSaved).Split("\r\n"); for (long i = 1; i < res.LongLength; i++) { maskDownload.Add(res[i]); } } else { File.WriteAllText(TemporaryFileInfoSaved, null); } DownloadFile downloadFile = new DownloadFile(functionAndSetting); foreach (var Elem in bdDirectory.UploadetFiles) { if (!maskDownload.Contains(Elem.ResulUploadFileInfo.UrlSave)) { // Проверяем является запись пустой папкой if (Elem.ResulUploadFileInfo.UrlSave == null) { Directory.CreateDirectory((Elem.SaveDirectory != null && Elem.SaveDirectory.Length > 0 && Elem.SaveDirectory.Replace('/', '\\')[0] == '\\') ? Path.Combine(Patch, Elem.SaveDirectory.Remove(0, 1)) : Path.Combine(Patch, Elem.SaveDirectory)); } else { string PatchSave = GetPatchLocal(Elem.SaveDirectory) != null?Path.Combine(Patch, GetPatchLocal(Elem.SaveDirectory)) : Patch; Directory.CreateDirectory(PatchSave); downloadFile.DownloadHendler(Elem.ResulUploadFileInfo.UrlSave, PatchSave, Path.GetFileName(Elem.SaveDirectory), MaxFilesUpload, Elem.Password, massenge); } resSevInfo : try { File.AppendAllText(TemporaryFileInfoSaved, "\r\n" + Elem.ResulUploadFileInfo.UrlSave); } catch { goto resSevInfo; } } } } resDel : try { if (File.Exists(TemporaryFileInfoSaved)) { File.Delete(TemporaryFileInfoSaved); } } catch { goto resDel; } } catch (Exception e) { if (massenge != null) { massenge.Invoke("[Error] Ошибка получения главного файла", ConsoleColor.Red); } return; } }