因为本人经常需要同步一些文件,但是公文包有时不能满足要求,所以自己试着研究,希望大家PP,只要大家在前端调用就可以,本来也做好一个前端,但是没有空间可以上传,希望大家有免费的地方介绍以下,谢谢!
public class FileExpand
{
/// <summary>
/// 文件比对,一样返回true否则为false
/// </summary>
/// <param name="AFileSrc">源文件</param>
/// <param name="AFileDec">目标文件</param>
/// <returns></returns>
public static bool FileCompare(string AFileSrc, string AFileDec)
{
if (!File.Exists(AFileSrc) || !File.Exists(AFileDec))
return false;
if (AFileSrc == AFileDec)
return true;
int file1byte = 0;
int file2byte = 0;
using (FileStream fs1 = new FileStream(AFileSrc, FileMode.Open), fs2 = new FileStream(AFileDec, FileMode.Open))
{// 检查文件大小。如果两个文件的大小并不相同,则视为不相同。
if (fs1.Length != fs2.Length)
{// 关闭文件。
fs1.Close();
fs2.Close();
return false;
}// 逐一比较两个文件的每一个字节,直到发现不相符或已到达文件尾端为止。
do
{
// 从每一个文件读取一个字节。
file1byte = fs1.ReadByte();
file2byte = fs2.ReadByte();
}
while ((file1byte == file2byte) && (file1byte != -1));
// 关闭文件。
fs1.Close();
fs2.Close();
}// 返回比较的结果。在这个时候,只有当两个文件的内容完全相同时,"file1byte" 才会等于 "file2byte"。
return ((file1byte - file2byte) == 0);
}
/// <summary>
/// 把文件A复制到文件B
/// </summary>
/// <param name="AFileSrc">源文件</param>
/// <param name="AFileDec">目标文件</param>
/// <returns></returns>
public static bool FileCopy(string AFileSrc, string AFileDec)
{
if (!File.Exists(AFileSrc))
return false;
try
{
if (File.Exists(AFileDec))
File.Copy(AFileSrc, AFileDec, true);
else
File.Copy(AFileSrc, AFileDec);
return true;
}
catch (Exception ex)
{
return false;
}
}
/// <summary>
/// 文件夹同步
/// </summary>
/// <param name="ADireSrc">源文件夹</param>
/// <param name="ADireDec">目标文件夹</param>
/// <returns></returns>
public static bool DirectorySyn(string ADireSrc, string ADireDec)
{
if (!Directory.Exists(ADireDec) || !Directory.Exists(ADireSrc))
return false;
try
{
SearchDirectory(ADireSrc, ADireDec);
return true;
}
catch (Exception ex)
{
return false;
}
}
/// <summary>
/// 文件夹遍历
/// </summary>
/// <param name="ADireSrc">源文件夹</param>
/// <param name="ADireDec">目标文件夹</param>
private static void SearchDirectory(string ADireSrc, string ADireDec)
{
if (Directory.Exists(ADireSrc))
{
string[] strArray = Directory.GetDirectories(ADireSrc);
FilesCompare(ADireSrc, ADireDec);
if (strArray.Length > 0)
{
foreach (string sPath in strArray)
{
string sDecPath = sPath.Replace(ADireSrc, ADireDec);
if (!Directory.Exists(sDecPath))
Directory.CreateDirectory(sDecPath);
SearchDirectory(sPath, sDecPath);
}
}
}
}
/// <summary>
/// 同一文件夹中文件同步
/// </summary>
/// <param name="ADireSrc">源文件夹</param>
/// <param name="ADireDec">目标文件夹</param>
private static void FilesCompare(string ADireSrc, string ADireDec)
{
if (Directory.Exists(ADireSrc))
{
string[] strArray = Directory.GetFiles(ADireSrc);
if (strArray.Length > 0)
{
foreach (string sPath in strArray)
{
if (!FileCompare(sPath, sPath.Replace(ADireSrc, ADireDec)))
FileCopy(sPath, sPath.Replace(ADireSrc, ADireDec));
}
}
}
}
}