private async Task EncodeFolder(IEnumerable <string> plainfolder, string rootpath = null) { foreach (var folder in plainfolder) { if (!Directory.Exists(folder)) { Log("folder not found : {0}", folder); continue; } var encparent = rootpath; if (encparent == null) { encparent = Directory.GetParent(folder).FullName; } string encfolder = null; if (radioButton_NameEncryption.Checked) { var plainfoldername = (folder.EndsWith("\\")) ? Path.GetDirectoryName(folder) : folder; var i = plainfoldername.LastIndexOf('\\'); if (i >= 0) { plainfoldername = plainfoldername.Substring(i + 1); } var encfoldername = CryptRclone.EncryptName(plainfoldername); encfolder = Path.Combine(encparent, encfoldername); if (Directory.Exists(encfolder)) { Log("Exists : {0}", encfolder); continue; } try { Directory.CreateDirectory(encfolder); } catch (Exception ex) { Log("CreateDirectory failed : {0} {1}", encfolder, ex.Message); continue; } Log("OK : {0}->{1}", folder, encfolder); } else { encfolder = folder; } // subitems var subfiles = Directory.GetFiles(folder); var subdirs = Directory.GetDirectories(folder); await EncodeFile(subfiles, encfolder); await EncodeFolder(subdirs, encfolder); } }
private string pathToCryptedpath(string path) { var ret = new List <string>(); while (!string.IsNullOrEmpty(path)) { var m = Regex.Match(path, @"^(?<current>[^/\\]*)(/|\\)?(?<next>.*)$"); path = m.Groups["next"].Value; if (string.IsNullOrEmpty(m.Groups["current"].Value)) { continue; } if (m.Groups["current"].Value == ".") { continue; } if (m.Groups["current"].Value == "..") { if (ret.Count > 0) { ret.RemoveAt(ret.Count - 1); } } else { if (Encrypter.IsEncryptedName) { ret.Add(Encrypter.EncryptName(m.Groups["current"].Value)); } else { var plain = m.Groups["current"].Value; ret.Add((path == "") ? plain + CryptRclone.encryptedSuffix : plain); } } } return(string.Join("/", ret)); }
private async Task EncodeFile(IEnumerable <string> plainfiles, string rootpath = null) { foreach (var file in plainfiles) { if (!File.Exists(file)) { Log("file not found : {0}", file); continue; } var encfilepath = rootpath; if (encfilepath == null) { encfilepath = Path.GetDirectoryName(file); } var plainfilename = Path.GetFileName(file); var encfilename = (radioButton_NamePlain.Checked)? plainfilename + CryptRclone.encryptedSuffix: CryptRclone.EncryptName(plainfilename); var encfile = Path.Combine(encfilepath, encfilename); if (File.Exists(encfile)) { Log("Exists : {0}", encfile); continue; } using (var pfile = File.OpenRead(file)) using (var efile = File.OpenWrite(encfile)) using (var cfile = new CryptRclone.CryptRclone_CryptStream(pfile)) { try { await cfile.CopyToAsync(efile, 81920, cts.Token); } catch (Exception ex) { Log("Encode Error : {0}->{1} {2}", file, encfile, ex.Message); continue; } } Log("OK : {0}->{1}", file, encfile); } }