文件夹同步 c#免费下载.docx
《文件夹同步 c#免费下载.docx》由会员分享,可在线阅读,更多相关《文件夹同步 c#免费下载.docx(12页珍藏版)》请在冰豆网上搜索。
![文件夹同步 c#免费下载.docx](https://file1.bdocx.com/fileroot1/2022-10/28/f424af22-55ae-4df8-999d-02d2d3bd6ec1/f424af22-55ae-4df8-999d-02d2d3bd6ec11.gif)
文件夹同步c#免费下载
文件夹同步c#(免费下载).txt没有不疼的伤口,只有流着血却微笑的人有时候给别人最简单的建议却是自己最难做到的。
usingSystem;
usingSystem.IO;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Collections;
usingSystem.Threading;
/*
*名称:
文件夹同步
*作者:
陈长安
*时间:
20104-28
*地点:
西北大学网络安全实验室
*说明:
1实现文件夹同步,功能简单但是全面,有批处理功能
*2初学c#时所写,所以是面向过程的程序,如果改成面向对象的版本,程序代码量减少很多
*3windowsxp的特点:
删除时文件名区分字母大小写,覆盖时文件名不区分大小写
*4编程语言c#
*5编程环境开始时在vs05后改成vs08在vs08下正常运行
*6可以深入进子文件夹,处理子文件夹内部的同步(通过递归实现)
*7供初学编程者和着急用功能的编程人员(学习人员)参考
*/
namespace文件夹同步_书上复杂版代码实现_2010_04_28
{
classProgram
{
//方法1:
get文件名
publicstringGetFilename(stringfile)
{
FileInfoa=newFileInfo(file);
returna.Name;
}
//方法2:
删除文件夹,解决问题:
“提示:
System.IO.IOException:
目录不是空的.”
//删除一个目录,先遍历删除其下所有文件和目录(递归)
///绝对路径
///是否已经删除
publicboolDeleteADirectory(stringstrPath)
{
string[]strTemp;
try
{
//先删除该目录下的文件
strTemp=System.IO.Directory.GetFiles(strPath);
foreach(stringstrinstrTemp)
{
System.IO.File.Delete(str);
}
//删除子目录,递归
strTemp=System.IO.Directory.GetDirectories(strPath);
foreach(stringstrinstrTemp)
{
DeleteADirectory(str);
}
//删除该目录
System.IO.Directory.Delete(strPath);
returntrue;
}
catch(Exceptione)
{
returnfalse;
}
}
///////////////////////////////////////////////////对应目的文件夹独有的东西,手动选择动删除
//方法3,"第一步",处理仅在目的文件夹里含有东西
publicvoiddiyibu(stringfolder1,stringfolder2)
{
System.IO.DirectoryInfodiA=newSystem.IO.DirectoryInfo(folder2);//目的文件夹被实例化diA
System.IO.FileInfo[]fiA=diA.GetFiles();//fiA是字符串数组含有目的文件夹所有子文件
System.IO.DirectoryInfo[]diAs=diA.GetDirectories();//diAs是字符串数组含有目的文件夹所以子文件夹
//循环目的文件夹内的所有子文件,该删的删
foreach(FileInfotmpfiAinfiA)
{
if(!
File.Exists(folder1+tmpfiA.Name))//如果源文件夹中没有同名文件
{
Console.WriteLine("你要删除仅--{0}--里有的{1}吗?
\n同意输入y,不同意输入n\n",folder2,tmpfiA.Name);
stringi=Console.ReadLine();
if(i=="y")
{
tmpfiA.Delete();
}
}
}
//循环目的文件夹内的所有子文件夹,该删的删
foreach(DirectoryInfotmpdiAsindiAs)
{
if(!
Directory.Exists(folder1+tmpdiAs.Name))//如果只目的文件夹有这个名的文件夹
{
Console.WriteLine("你要删除仅--{0}--里有的{1}文件夹吗?
\n同意输入y,不同意输入n\n",folder2,tmpdiAs.Name);
stringi=Console.ReadLine();
if(i=="y")
{
this.DeleteADirectory(folder2+"\\"+tmpdiAs);
}
}
}
//对同名文件夹,递归这么diyibu函数
foreach(DirectoryInfotmpdiAsindiAs)//循环目的文件夹里的所有子文件夹
{
if(Directory.Exists(folder1+tmpdiAs.Name))//如果有同名文件夹
{
diyibu(folder1+"\\"+tmpdiAs,folder2+"\\"+tmpdiAs);
}
}
}
///////////////////////////////////////////////////对应目的文件夹独有的东西,自动删除
//方法3’:
全部删除版“第一步”,方法名:
diyibu_1
publicvoiddiyibu_1(stringfolder1,stringfolder2)
{
System.IO.DirectoryInfodiA=newSystem.IO.DirectoryInfo(folder2);//目的文件夹被实例化diA
System.IO.FileInfo[]fiA=diA.GetFiles();//fiA是字符串数组含有目的文件夹所有子文件
System.IO.DirectoryInfo[]diAs=diA.GetDirectories();//diAs是字符串数组含有目的文件夹所以子文件夹
//循环目的文件夹内的所有子文件,该删的删
foreach(FileInfotmpfiAinfiA)
{
if(!
File.Exists(folder1+tmpfiA.Name))//如果源文件夹中没有同名文件
{
tmpfiA.Delete();
}
}
//循环目的文件夹内的所有子文件夹,该删的删
foreach(DirectoryInfotmpdiAsindiAs)
{
if(!
Directory.Exists(folder1+tmpdiAs.Name))//如果只目的文件夹有这个名的文件夹
{
this.DeleteADirectory(folder2+"\\"+tmpdiAs);
}
}
//对同名文件夹,递归这么diyibu_1函数
foreach(DirectoryInfotmpdiAsindiAs)//循环目的文件夹里的所有子文件夹
{
if(Directory.Exists(folder1+tmpdiAs.Name))//如果有同名文件夹
{
diyibu_1(folder1+"\\"+tmpdiAs,folder2+"\\"+tmpdiAs);
}
}
}
//////////////////////////////////////////////////对应同名文件,手动选择覆盖
//方法4:
文件to文件,新建或覆盖
publicvoidFileToFile(stringfile1,stringfile2)//源文件and目标文件的路径,文件的路径精确到c/1/a.txt
{
//先判断在目标路径下有无同名文件
FileInfoa=newFileInfo(file2);//用目标路径实例化一个文件信息类,用于调用检测文件是否存在的Exists属性
//如果有同名文件,询问是否覆盖
if(a.Exists)
{
Console.WriteLine("你确定要拿---{0}\n覆盖---{1}---吗?
\n同意输入y,不同意输入n",file1,file2);
stringi=Console.ReadLine();
if(i=="y")
{
File.Copy(file1,file2,true);
}
};
//如果没有同名文件,复制过去
File.Copy(file1,file2,true);
}
//方法5:
文件to文件夹,到文件夹里面新建或覆盖
publicvoidFileToFolder(stringfile,stringfolder)
{
//如目标路径的文件夹不存在,新建
if(!
Directory.Exists(folder))
Directory.CreateDirectory(folder);
//进入文件夹后,还是文件到文件的操作
this.FileToFile(file,folder+"\\"+this.GetFilename(file));
}
//方法6:
文件夹to文件夹:
1-->2,新建或同名文件夹时进层处理
publicvoidFolderToFolder(stringfolder1,stringfolder2)
{
//如目标路径的文件夹不存在,新建
if(!
Directory.Exists(folder2))
Directory.CreateDirectory(folder2);
//复制所有替身文件夹,文件夹to文件夹
string[]folders=Directory.GetDirectories(folder1);//获取源文件夹所有子文件夹的名称?
@@@@@@@@@@@@@@@@@@@
foreach(stringstrinfolders)//所有源文件的子文件夹,一个一个过去。
?
?
?
要用路径,str是路径?
?
?
@@@@@@@@@
{
this.FolderToFolder(str,folder2+"\\"+this.GetFilename(str));
//?
?
?
怎么getgfilename把文件夹的名字弄到手了@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
}//我认为不是名称,是路径,可是书87页说是名