📄 backupthread.cs
字号:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.IO;
using BackupSystem.DataLayer;
namespace BackupSystem.LogicLayer
{
class BackupThread : ThreadStatus
{
private EntryList elEntryList;
public BackupThread(EntryList entryList)
{
this.elEntryList = entryList;
this.threadStart = new ThreadStart(Backup);
}
private void Backup()
{
try
{
int i = 0, n = this.elEntryList.Count;
foreach (Entry entry in this.elEntryList.Entries)
{
//复制文件或文件夹的文件夹
if (File.Exists(entry.OriginalFolder))
{
//档案文件夹
this.FileToFolder(entry.OriginalFolder, entry.TargetFolder);
}
else
{
//文件夹文件夹
this.FolderToFolder(entry.OriginalFolder, entry.TargetFolder);
}
//进程信息
this.fFilePercentage = (float)(++i) / n;
this.strProcessingFile = entry.OriginalFolder;
}
}
catch (ThreadInterruptedException)
{
}
finally
{
this.bIsFinished = true;
}
}
/// <summary>
/// file1复制到file2,并覆盖.
/// </summary>
/// <param name="file1"></param>
/// <param name="file2"></param>
private void FileToFile(string file1, string file2)
{
this.strProcessingFile = file1;
File.Copy(file1, file2, true);
}
private void FileToFolder(string file, string folder)
{
if (!Directory.Exists(folder))
Directory.CreateDirectory(folder);
this.strProcessingFile = file;
this.FileToFile(file, folder + "\\" + this.GetFilename(file));
}
private void FolderToFolder(string folder1, string folder2)
{
if (!Directory.Exists(folder2))
Directory.CreateDirectory(folder2);
//复制所有子文件夹
string[] folders = Directory.GetDirectories(folder1);
foreach (string str in folders)
{
this.FolderToFolder(str, folder2 + "\\" + this.GetFilename(str));
}
//复制所有子文件
string[] files = Directory.GetFiles(folder1);
foreach (string str in files)
{
this.FileToFolder(str, folder2);
}
}
private string GetFilename(string path)
{
return path.Substring(path.LastIndexOf('\\') + 1);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -