예제 #1
0
        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);
            }
        }
예제 #2
0
        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));
        }
예제 #3
0
        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);
            }
        }