复制某一目录下的所有文件(包括子目录以及子目录下的所有文件)结构不变

时间:2021-12-29 14:30:21
复制某一目录下的所有文件(包括子目录以及子目录下的所有文件)结构不变到另外一个目录
 比如 c:\winnt 下所有文件和目录到D:\windows
   
C#

9 个解决方案

#1


/// <summary>
/// 复制指定目录的所有文件,不包含子目录
/// </summary>
/// <param name="sourceDir">原始目录</param>
/// <param name="targetDir">目标目录</param>
/// <param name="overWrite">如果为true,表示覆盖同名文件,否则不覆盖</param>
public static void CopyFiles(string sourceDir,string targetDir,bool overWrite)
{
CopyFiles(sourceDir,targetDir,overWrite,false);
}
/// <summary>
/// 复制指定目录的所有文件
/// </summary>
/// <param name="sourceDir">原始目录</param>
/// <param name="targetDir">目标目录</param>
/// <param name="overWrite">如果为true,覆盖同名文件,否则不覆盖</param>
/// <param name="copyDir">如果为true,包含目录,否则不包含</param>
public static void CopyFiles(string sourceDir,string targetDir,bool overWrite,bool copyDir)   
{
string [] fileEntries = Directory.GetFiles(sourceDir);
if(overWrite)
{
foreach(string fileName in fileEntries)
{
File.Copy(fileName,targetDir+fileName.Substring(fileName.LastIndexOf("\\")),true);
//Console.WriteLine(fileName+"-->"+targetDir+fileName.Substring(fileName.LastIndexOf("\\")));
}
}
else
{
foreach(string fileName in fileEntries)
{
if(!File.Exists(targetDir+fileName.Substring(fileName.LastIndexOf("\\"))))
{
File.Copy(fileName,targetDir+fileName.Substring(fileName.LastIndexOf("\\")));
//Console.WriteLine(fileName+"-->"+targetDir+fileName.Substring(fileName.LastIndexOf("\\")));
}
}
}
if(copyDir)
{
foreach(string subDir in Directory.GetDirectories(sourceDir))
{
string newSubDir = targetDir+subDir.Substring(subDir.LastIndexOf("\\"));
if(!Directory.Exists(newSubDir))
Directory.CreateDirectory(newSubDir);
CopyFiles(subDir,newSubDir,overWrite,copyDir);
}
}
}

#2


遍历+递归

#3


递归遍历

#4


学习了,当然要UP,同时接分

#5


up 下!
你做过网络的那种吗!

#6


http://www.zpcity.com/ArLi//commonprj/cls_DirCopy.cs

#7


嗯嗯

#8


谢谢各位了!
接着还有一个问题!上面已经做好了局域网的文件的  COPY。
我想进一步实现,局域网*享基于用户名和密码的访问?
请问怎么做,该怎么样传送用户名和密码?

#9


谢谢各位了!
接着还有一个问题!上面已经做好了局域网的文件的  COPY。
我想进一步实现,局域网*享基于用户名和密码的访问?
请问怎么做,该怎么样传送用户名和密码?

服务器上有一个要密码访问的共享文件夹。
在客户端写一个基于Socket的编程,怎么验证密码!
我的思路是,先得到S端的共享UNC,传送User 和Password,并验证。
但我不知道怎么实现这一步!

请教各位了!!!

#1


/// <summary>
/// 复制指定目录的所有文件,不包含子目录
/// </summary>
/// <param name="sourceDir">原始目录</param>
/// <param name="targetDir">目标目录</param>
/// <param name="overWrite">如果为true,表示覆盖同名文件,否则不覆盖</param>
public static void CopyFiles(string sourceDir,string targetDir,bool overWrite)
{
CopyFiles(sourceDir,targetDir,overWrite,false);
}
/// <summary>
/// 复制指定目录的所有文件
/// </summary>
/// <param name="sourceDir">原始目录</param>
/// <param name="targetDir">目标目录</param>
/// <param name="overWrite">如果为true,覆盖同名文件,否则不覆盖</param>
/// <param name="copyDir">如果为true,包含目录,否则不包含</param>
public static void CopyFiles(string sourceDir,string targetDir,bool overWrite,bool copyDir)   
{
string [] fileEntries = Directory.GetFiles(sourceDir);
if(overWrite)
{
foreach(string fileName in fileEntries)
{
File.Copy(fileName,targetDir+fileName.Substring(fileName.LastIndexOf("\\")),true);
//Console.WriteLine(fileName+"-->"+targetDir+fileName.Substring(fileName.LastIndexOf("\\")));
}
}
else
{
foreach(string fileName in fileEntries)
{
if(!File.Exists(targetDir+fileName.Substring(fileName.LastIndexOf("\\"))))
{
File.Copy(fileName,targetDir+fileName.Substring(fileName.LastIndexOf("\\")));
//Console.WriteLine(fileName+"-->"+targetDir+fileName.Substring(fileName.LastIndexOf("\\")));
}
}
}
if(copyDir)
{
foreach(string subDir in Directory.GetDirectories(sourceDir))
{
string newSubDir = targetDir+subDir.Substring(subDir.LastIndexOf("\\"));
if(!Directory.Exists(newSubDir))
Directory.CreateDirectory(newSubDir);
CopyFiles(subDir,newSubDir,overWrite,copyDir);
}
}
}

#2


遍历+递归

#3


递归遍历

#4


学习了,当然要UP,同时接分

#5


up 下!
你做过网络的那种吗!

#6


http://www.zpcity.com/ArLi//commonprj/cls_DirCopy.cs

#7


嗯嗯

#8


谢谢各位了!
接着还有一个问题!上面已经做好了局域网的文件的  COPY。
我想进一步实现,局域网*享基于用户名和密码的访问?
请问怎么做,该怎么样传送用户名和密码?

#9


谢谢各位了!
接着还有一个问题!上面已经做好了局域网的文件的  COPY。
我想进一步实现,局域网*享基于用户名和密码的访问?
请问怎么做,该怎么样传送用户名和密码?

服务器上有一个要密码访问的共享文件夹。
在客户端写一个基于Socket的编程,怎么验证密码!
我的思路是,先得到S端的共享UNC,传送User 和Password,并验证。
但我不知道怎么实现这一步!

请教各位了!!!