/// <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); }
/// <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); } } }
/// <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) { } }
/// <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(@"请点击左侧的输入框选择文件夹!"); } }
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(); }
/// <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) { } }
/// <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) { } }
/// <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); } } } }