Beispiel #1
0
        /// <summary>
        /// 获取本地同步文件夹下所有文件
        /// </summary>
        /// <returns></returns>
        public static List <string> GetLocalFiles()
        {
            var path     = LocalDiskPathHelper.GetPath();
            var contents = new List <string>();

            var rootFiles = (new DirectoryInfo(path)).GetFiles();

            if (rootFiles.Length > 0)
            {
                foreach (var rootFile in rootFiles)
                {
                    contents.Add(rootFile.FullName.Replace(path, ""));
                }
            }

            var dirs = new List <DirectoryInfo>();

            MemoryFileManager.GetALlDirectoryInfo(path, ref dirs);
            if (dirs.Count > 0)
            {
                foreach (var dir in dirs)
                {
                    contents.Add(dir.FullName.Replace(path, ""));
                    var files = dir.GetFiles();

                    foreach (var file in files)
                    {
                        contents.Add(file.FullName.Replace(path, ""));
                    }
                }
            }
            return(contents);
        }
Beispiel #2
0
        /// <summary>
        /// 同步云端已删除的文件到本地。
        /// </summary>
        public static void SyncCloudRemoveFileToLocal()
        {
            var path       = LocalDiskPathHelper.GetPath();
            var localFiles = GetLocalFiles();

            if (localFiles != null && localFiles.Count > 0)
            {
                if (CloudFiles != null && CloudFiles.Count > 0)
                {
                    foreach (var localFile in localFiles)
                    {
                        if (!CloudFiles.Contains(localFile))
                        {
                            if (Directory.Exists(path + localFile))
                            {
                                Directory.Delete(path + localFile, true);
                            }
                            else if (File.Exists(path + localFile))
                            {
                                File.Delete(path + localFile);
                            }
                        }
                    }
                }
                else
                {
                    Directory.Delete(path, true);
                    Directory.CreateDirectory(path);
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// 初始化文件缓存信息。
        /// </summary>
        public static void GetLocalFileData()
        {
            try
            {
                var root      = LocalDiskPathHelper.GetPath();
                var rootFiles = (new DirectoryInfo(root)).GetFiles();
                if (rootFiles.Length > 0)
                {
                    foreach (var rootFile in rootFiles)
                    {
                        var memoryFile = new MemoryFile();
                        memoryFile.CreateDate     = rootFile.CreationTime;
                        memoryFile.FilePath       = rootFile.FullName.Replace(root, "");
                        memoryFile.FileStatus     = FileStatusEnum.Normal;
                        memoryFile.FileType       = FileTypeEnum.File;
                        memoryFile.LastModifyDate = rootFile.LastWriteTime;
                        GetInstance().SetFile(memoryFile);
                    }
                }

                var dirs = new List <DirectoryInfo>();

                GetALlDirectoryInfo(root, ref dirs);

                if (dirs.Count > 0)
                {
                    foreach (var dir in dirs)
                    {
                        var memoryFile = new MemoryFile();
                        memoryFile.CreateDate     = dir.CreationTime;
                        memoryFile.FilePath       = dir.FullName.Replace(root, "");
                        memoryFile.FileStatus     = FileStatusEnum.Normal;
                        memoryFile.FileType       = FileTypeEnum.Directory;
                        memoryFile.LastModifyDate = dir.LastWriteTime;
                        GetInstance().SetFile(memoryFile);

                        var files = dir.GetFiles();

                        foreach (var file in files)
                        {
                            var memoryFile1 = new MemoryFile();
                            memoryFile1.CreateDate     = file.CreationTime;
                            memoryFile1.FilePath       = file.FullName.Replace(root, "");
                            memoryFile1.FileStatus     = FileStatusEnum.Normal;
                            memoryFile1.FileType       = FileTypeEnum.File;
                            memoryFile1.LastModifyDate = file.LastWriteTime;
                            GetInstance().SetFile(memoryFile1);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }
Beispiel #4
0
 /// <summary>
 /// 点击设置按钮
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btnSetDiskPosition_Click(object sender, EventArgs e)
 {
     if (!string.IsNullOrEmpty(tbDiskPostion.Text))
     {
         LocalDiskPathHelper.SetPath(tbDiskPostion.Text);
         DokanNet.DokanRemoveMountPoint("l:\\");
         MountDisk();
         MessageBox.Show(@"设置成功");
     }
     else
     {
         MessageBox.Show(@"请点击左侧的输入框选择文件夹!");
     }
 }
Beispiel #5
0
        private void MountDisk()
        {
            BackgroundWorker _dokanWorker = new BackgroundWorker();

            _dokanWorker.DoWork += delegate
            {
                try
                {
                    DokanOptions opt = new DokanOptions();
                    opt.DebugMode   = true;
                    opt.MountPoint  = "l:\\";
                    opt.VolumeLabel = "超云盘";
                    opt.ThreadCount = 5;
                    DokanNet.DokanMain(opt, new MirrorDisk(LocalDiskPathHelper.GetPath()));
                }
                catch
                {
                }
            };
            _dokanWorker.RunWorkerAsync();
        }
Beispiel #6
0
        /// <summary>
        /// 主窗体加载
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Main_Load(object sender, EventArgs e)
        {
            try
            {
                tbDiskPostion.Text = LocalDiskPathHelper.GetPath();

                var client    = new CloudDiskManager();
                var diskSpace = client.GetCloudDiskCapacityInfo();
                AppDomain.CurrentDomain.SetData("diskspace", diskSpace);
                this.Text = "超云盘设置(空间:"
                            + ServiceHandler.FormatBytes((long)(diskSpace.TotalByte - diskSpace.TotalAvailableByte)) + "/"
                            + ServiceHandler.FormatBytes((long)diskSpace.TotalByte) + ")";

                if (!string.IsNullOrEmpty(LocalDiskPathHelper.GetPath()))
                {
                    ServiceHandler.Start();
                }

                MountDisk();
            }
            catch (Exception ex)
            {
            }
        }
Beispiel #7
0
        /// <summary>
        /// 同步云端的文件到本地。
        /// </summary>
        public static void SyncCloudFileToLocal(CloudFileInfoModel fileInfo)
        {
            try
            {
                var root = LocalDiskPathHelper.GetPath();

                var cloudManager = new CloudDiskManager();
                var cloudFile    = cloudManager.GetCloudFileInfo(
                    CloudDiskType.NOT_SPECIFIED, fileInfo.IsDir, fileInfo.Path);
                if (cloudFile != null)
                {
                    CloudFiles.Add(cloudFile.LocalPath);

                    var path = root + cloudFile.LocalPath;

                    if (fileInfo.Path != "/")
                    {
                        if (cloudFile.IsDir)
                        {
                            if (!Directory.Exists(path))
                            {
                                Directory.CreateDirectory(path);
                            }
                        }
                        else
                        {
                            var needCreat = false;
                            if (!File.Exists(path))
                            {
                                needCreat = true;
                            }
                            else
                            {
                                var file = new FileInfo(path);
                                if (cloudFile.LastModifiedDate.HasValue)
                                {
                                    if (file.LastWriteTime < cloudFile.LastModifiedDate)
                                    {
                                        File.Delete(path);
                                        needCreat = true;
                                    }
                                }
                            }
                            if (needCreat)
                            {
                                var fileContent = cloudManager.DownloadFile(CloudDiskType.NOT_SPECIFIED, cloudFile.Path);
                                File.WriteAllBytes(path, fileContent);
                            }
                        }
                    }

                    if (cloudFile != null && cloudFile.Contents != null && cloudFile.Contents.Count > 0)
                    {
                        foreach (var subFile in cloudFile.Contents)
                        {
                            if (!cloudFile.Path.EndsWith("/"))
                            {
                                cloudFile.Path = cloudFile.Path + "/";
                            }
                            subFile.Path = cloudFile.Path + subFile.name;
                            SyncCloudFileToLocal(subFile);
                        }
                    }
                }
            }catch (Exception ex)
            {
            }
        }
Beispiel #8
0
        /// <summary>
        /// 同步更改的内容到云
        /// </summary>
        public static void SyncChangeFileToCloud()
        {
            var memFiles = new List <MemoryFile>();

            memFiles =
                MemoryFileManager.GetInstance().GetAllFiles().OrderBy(p => p.FilePath).Where(
                    p => p.FileStatus != FileStatusEnum.Remove).ToList();
            var cloudDisk = new CloudDiskManager();
            var root      = LocalDiskPathHelper.GetPath();

            if (memFiles.Count > 0)
            {
                while (memFiles.Count > 0)
                {
                    var memFile = memFiles[0];
                    try
                    {
                        if (memFile.FileType == FileTypeEnum.Directory)
                        {
                            if (memFile.FileStatus == FileStatusEnum.Create)
                            {
                                cloudDisk.CreateDirectory(memFile.FilePath);
                                memFile.FileStatus = FileStatusEnum.Normal;
                                MemoryFileManager.GetInstance().SetFile(memFile);
                            }
                            else
                            {
                                var cloudFiles = cloudDisk.GetCloudFileInfo(CloudDiskType.NOT_SPECIFIED, true, memFile.FilePath);
                                if (cloudFiles == null)
                                {
                                    cloudDisk.CreateDirectory(memFile.FilePath);
                                }
                            }
                        }
                        else if (memFile.FileType == FileTypeEnum.File)
                        {
                            if (memFile.FileStatus == FileStatusEnum.Create)
                            {
                                var fileInfo = new FileInfo(root + memFile.FilePath);
                                var buffer   = new byte[fileInfo.Length];
                                fileInfo.OpenRead().Read(buffer, 0, (int)fileInfo.Length);
                                cloudDisk.UploadFile(
                                    CloudFileUploadType.Create, memFile.FilePath, buffer);
                                memFile.FileStatus = FileStatusEnum.Normal;
                                MemoryFileManager.GetInstance().SetFile(memFile);
                            }
                            else
                            {
                                var cloudFiles = cloudDisk.GetCloudFileInfo(CloudDiskType.NOT_SPECIFIED, false, memFile.FilePath);
                                if (cloudFiles == null)
                                {
                                    var fileInfo = new FileInfo(root + memFile.FilePath);
                                    var buffer   = new byte[fileInfo.Length];
                                    fileInfo.OpenRead().Read(buffer, 0, (int)fileInfo.Length);
                                    cloudDisk.UploadFile(
                                        CloudFileUploadType.Create, memFile.FilePath, buffer);
                                }
                                else
                                {
                                    var fileInfo = new FileInfo(root + memFile.FilePath);
                                    if (cloudFiles.LastModifiedDate.HasValue)
                                    {
                                        if (fileInfo.LastWriteTime > cloudFiles.LastModifiedDate)
                                        {
                                            var buffer = new byte[fileInfo.Length];
                                            fileInfo.OpenRead().Read(buffer, 0, (int)fileInfo.Length);
                                            cloudDisk.UploadFile(
                                                CloudFileUploadType.Create, memFile.FilePath, buffer);
                                        }
                                    }
                                }
                            }
                        }
                        memFiles.Remove(memFile);
                    }
                    catch (Exception)
                    {
                        memFiles.Remove(memFile);
                    }
                }
            }
        }