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; } var plainfoldername = (folder.EndsWith("\\")) ? Path.GetDirectoryName(folder) : folder; var i = plainfoldername.LastIndexOf('\\'); if (i >= 0) { plainfoldername = plainfoldername.Substring(i + 1); } var encfoldername = CryptCarotDAV.EncryptFilename(plainfoldername); var 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); // subitems var subfiles = Directory.GetFiles(folder); var subdirs = Directory.GetDirectories(folder); await EncodeFile(subfiles, encfolder); await EncodeFolder(subdirs, encfolder); } }
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 = CryptCarotDAV.EncryptFilename(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 CryptCarotDAV.CryptCarotDAV_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); } }