Browse Source

已完成文件的变动监测,实现备份文件

yuzhengyang 8 years ago
parent
commit
cdc478908a

+ 2 - 0
Fork.Net/Fork.Net.SpeciallyTools/Y.FileQueryEngine/Y.FileQueryEngine.csproj

@@ -22,6 +22,7 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <DocumentationFile>bin\Debug\Y.FileQueryEngine.XML</DocumentationFile>
+    <Prefer32Bit>false</Prefer32Bit>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>pdbonly</DebugType>
@@ -30,6 +31,7 @@
     <DefineConstants>TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
+    <Prefer32Bit>false</Prefer32Bit>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />

+ 0 - 3
Fork.Net/Oreo.Plugins/Oreo.FileMan/Models/BackupFiles.cs

@@ -8,10 +8,7 @@ namespace Oreo.FileMan.Models
     public class BackupFiles
     {
         public int Id { get; set; }
-        public string Name { get; set; }
-        public string Path { get; set; }
         public string FullPath { get; set; }
-        public string  BackupName { get; set; }
         public string BackupFullPath { get; set; }
         public long Size { get; set; }
         public string UpdateTime { get; set; }

+ 1 - 2
Fork.Net/Oreo.Plugins/Oreo.FileMan/Models/BackupPaths.cs

@@ -8,8 +8,7 @@ namespace Oreo.FileMan.Models
     public class BackupPaths
     {
         public int Id { get; set; }
-        public string  Name { get; set; }
         public string  Path { get; set; }
-        
+        public string Alias { get; set; }
     }
 }

+ 43 - 32
Fork.Net/Oreo.Plugins/Oreo.FileMan/Partials/FileBackupPartial.cs

@@ -24,7 +24,7 @@ namespace Oreo.FileMan.Partials
     public partial class FileBackupPartial : UserControl
     {
         FileWatcher Watcher = new FileWatcher();
-        string FileManBackup = @"G:\FileManBackup\";
+        string FileManBackup = @"F:\FileManBackup\";
         List<BackupPaths> Paths = new List<BackupPaths>();
         List<string> BackupFiles = new List<string>();
         DispatcherTimer Timer = new DispatcherTimer();
@@ -50,7 +50,7 @@ namespace Oreo.FileMan.Partials
                     {
                         foreach (var b in Paths)
                         {
-                            UIDgvPathAdd(b.Name);
+                            UIDgvPathAdd(DirTool.GetPathName(b.Path));
                         }
                     }
                 }
@@ -65,7 +65,7 @@ namespace Oreo.FileMan.Partials
             {
                 string selPath = dialog.SelectedPath;//获取选中的目录 
                 string path = DirTool.Combine(selPath, "\\");//格式化选中的目录
-                string name = Path.GetFileName(selPath);//获取目录名称
+                string name = DirTool.GetPathName(selPath);//获取目录名称
 
                 List<BackupPaths> clashPath = Paths.Where(x => x.Path.Contains(path) || path.Contains(x.Path)).ToList();//查询冲突项
                 if (ListTool.HasElements(clashPath))
@@ -77,25 +77,30 @@ namespace Oreo.FileMan.Partials
                 }
                 else
                 {
-                    long size = 0;//目录下的文件大小
-                    int row = DgvPath.Rows.Count;//当前目录列表总数
-                    BackupPaths bp = new BackupPaths() { Name = name, Path = path, };
-                    Paths.Add(bp);//添加到列表
-                    UIDgvPathAdd(name);//添加到列表UI
-
                     UIEnableButton(false);
                     Task.Factory.StartNew(() =>
                     {
                         using (var db = new Muse())
                         {
-                            if (!db.Do<BackupPaths>().Any(x => x.Path == path)) db.Add(bp);//添加到数据库
-                            List<string> files = FileTool.GetAllFile(path);
-                            if (ListTool.HasElements(files))
+                            if (!db.Do<BackupPaths>().Any(x => x.Path == path))
                             {
-                                foreach (var f in files)
+                                int row = DgvPath.Rows.Count;//当前目录列表总数 
+                                BackupPaths bp = new BackupPaths() { Path = path, Alias = Guid.NewGuid().ToString() };
+                                if (db.Add(bp) > 0)
                                 {
-                                    size += FileTool.Size(f);
-                                    UIDgvPathUpdate(row, name, ByteConvertTool.Fmt(size));//更新目录文件大小
+                                    Paths.Add(bp);//添加到列表
+                                    UIDgvPathAdd(name);//添加到列表UI
+
+                                    long size = 0;//目录下的文件大小
+                                    List<string> files = FileTool.GetAllFile(path);
+                                    if (ListTool.HasElements(files))
+                                    {
+                                        foreach (var f in files)
+                                        {
+                                            size += FileTool.Size(f);
+                                            UIDgvPathUpdate(row, name, ByteConvertTool.Fmt(size));//更新目录文件大小
+                                        }
+                                    }
                                 }
                             }
                         }
@@ -171,9 +176,9 @@ namespace Oreo.FileMan.Partials
             {
                 while (!IsDisposed)
                 {
-                    if (Watcher.IsStart)
+                    if (ListTool.HasElements(BackupFiles))
                     {
-                        //获取要备份的文件列表
+                        //获取要备份的文件列表并复制样本
                         List<string> temp;
                         lock (BackupFiles)
                         {
@@ -181,28 +186,34 @@ namespace Oreo.FileMan.Partials
                             BackupFiles = new List<string>();
                         }
 
-                        if (ListTool.HasElements(temp))
+                        foreach (var t in temp)
                         {
-                            foreach (var t in temp)
+                            if (File.Exists(t))
                             {
-                                if (File.Exists(t) && DirTool.Create(FileManBackup))
+                                string filepath = DirTool.GetFilePath(t);
+                                BackupPaths path = Paths.FirstOrDefault(x => filepath.Contains(x.Path));
+                                if (path != null)
                                 {
+                                    string pathname = path.Path;
+                                    string pathalias = path.Alias;
+                                    string pathfile = t.Substring(pathname.Length, t.Length - pathname.Length);
+                                    string fileext = DateTimeConvert.CompactString(DateTime.Now);
+                                    string fullpath = DirTool.Combine(FileManBackup, pathalias, pathfile + "." + fileext);
                                     try
                                     {
-                                        string filename = Guid.NewGuid().ToString();
-                                        File.Copy(t, DirTool.Combine(FileManBackup, filename), true);
-                                        using (var db = new Muse())
+                                        if (DirTool.Create(DirTool.GetFilePath(fullpath)))
                                         {
-                                            db.Add(new BackupFiles()
+                                            File.Copy(t, fullpath, true);
+                                            using (var db = new Muse())
                                             {
-                                                Name = Path.GetFileName(t),
-                                                Path = Path.GetDirectoryName(t),
-                                                FullPath = t,
-                                                BackupName = filename,
-                                                BackupFullPath = DirTool.Combine(FileManBackup, filename),
-                                                Size = FileTool.Size(t),
-                                                UpdateTime = DateTimeConvert.ToStandardString(DateTime.Now),
-                                            });
+                                                db.Add(new BackupFiles()
+                                                {
+                                                    FullPath = t,
+                                                    BackupFullPath = fullpath,
+                                                    Size = FileTool.Size(t),
+                                                    UpdateTime = DateTimeConvert.StandardString(DateTime.Now),
+                                                });
+                                            }
                                         }
                                     }
                                     catch (Exception e) { }

+ 1 - 1
Fork.Net/Oreo.Plugins/Oreo.FileMan/Partials/FileTypePartial.cs

@@ -199,7 +199,7 @@ namespace Oreo.FileMan.Partials
                         ParentNumber = data[i].ParentFileReferenceNumber.ToString(),
                         Drive = drive.Name,
                         Usn = data[i].Usn,
-                        CreateTime = DateTimeConvert.ToStandardString(DateTime.Now)
+                        CreateTime = DateTimeConvert.StandardString(DateTime.Now)
                     });
                     NewFileCount++;
                 }

+ 10 - 1
Fork.Net/Y.Utils/DataUtils/DateTimeUtils/DateTimeConvert.cs

@@ -23,9 +23,18 @@ namespace Y.Utils.DataUtils.DateTimeUtils
         /// </summary>
         /// <param name="dt"></param>
         /// <returns></returns>
-        public static string ToStandardString(DateTime dt)
+        public static string StandardString(DateTime dt)
         {
             return dt.ToString("yyyy-MM-dd HH:mm:ss");
         }
+        /// <summary>
+        /// yyyyMMddHHmmss
+        /// </summary>
+        /// <param name="dt"></param>
+        /// <returns></returns>
+        public static string CompactString(DateTime dt)
+        {
+            return dt.ToString("yyyyMMddHHmmss");
+        }
     }
 }

+ 20 - 0
Fork.Net/Y.Utils/IOUtils/PathUtils/DirTool.cs

@@ -174,5 +174,25 @@ namespace Y.Utils.IOUtils.PathUtils
 
             return -1;//不存在包含关系
         }
+        public static string GetPathName(string s)
+        {
+            StringBuilder sb = new StringBuilder();
+            if (!string.IsNullOrWhiteSpace(s))
+            {
+                char[] c = s.ToArray();
+                for (int i = c.Length - 1; i >= 0; i--)
+                {
+                    if (c[i] != '\\') { sb.Append(c[i]); }
+                    else { if (sb.Length > 0) break; }
+                }
+                char[] mirror = sb.ToString().ToArray();
+                sb.Clear();
+                for (int i = mirror.Length - 1; i >= 0; i--)
+                {
+                    sb.Append(mirror[i]);
+                }
+            }
+            return sb.ToString();
+        }
     }
 }