C#

pengpeng556 2012-09-24 11:09:39
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Start……");
string path=Path.GetFullPath("./");
DirectoryInfo dirinfo=new DirectoryInfo(path);
reg r = reg.getReg();
foreach (FileSystemInfo name in dirinfo.GetFileSystemInfos())
{
r.regName(name.Name);
}
Console.WriteLine("Done!!!");
Console.WriteLine("Please tap random key to exit!!!");
Console.ReadKey();
}
}

class reg
{
//private List<string> directory;
private static reg r;
private string patten = @"(\d*?)$";
private string patten2 = @"^([^.]*)\.";

public static reg getReg()
{
if (r == null)
{
r = new reg();
}
return r;
}

//主函数
public void regName(string name)
{
this.checkSummary();
string directoryName = Path.GetFullPath("./Summary") + "/" + this.getDirectoryName(name);
if (!Directory.Exists(directoryName))
{
Directory.CreateDirectory(directoryName);
}
try
{
File.Copy(Path.GetFullPath(name), directoryName + "/" + name);
string a = directoryName + "/" + name;
}
catch
{
try
{
//this.CopyDirectory(Path.GetFullPath(name), directoryName + "/" + name);
//this.copyfolder(Path.GetFullPath(name), directoryName + "/" + name);
this.CopyDirectory_(Path.GetFullPath(name), Path.GetFullPath("./Summary"));
}
catch { }
}
}

//获得分类地址
private string getDirectoryName(string name)
{
string directionName = name;
if (Regex.IsMatch(name, patten2))
{
directionName = Regex.Match(name, patten2).Groups[1].Value;
}
string spit = Regex.Match(directionName, patten).Groups[1].Value.ToString();
if (!string.IsNullOrEmpty(spit))
{
directionName = Regex.Match(directionName, @"(.*)" + spit + "$").Groups[1].Value.ToString();
}
return directionName;
}

//检测“summary”是否存在
private void checkSummary()
{
if (!Directory.Exists(Path.GetFullPath("./Summary")))
{
Directory.CreateDirectory(Path.GetFullPath("./Summary"));
}
}

#region 网上信手拈来
/*
private int DirectoryName(string DirectoryPath)//获取文件夹名,截取“\”
{
int j = 0; char[] c = DirectoryPath.ToCharArray();
for (int i = c.Length - 1; i >= 0; i--)//从后面截取
{
j = i;
if (c[i] == '\\')
{
break;//遇"\"调处,并返回"\"的位置
}
}
return j + 1;
}
private void CopyDirectory(string DirectoryPath, string DirAddress)//复制文件夹,
{
#region//递归
string s = DirectoryPath.Substring(DirectoryName(DirectoryPath));//获取文件夹名
if (Directory.Exists(DirAddress + "\\" + s))
{
Directory.Delete(DirAddress + "\\" + s, true);//若文件夹存在,不管目录是否为空,删除
Directory.CreateDirectory(DirAddress + "\\" + s);//删除后,重新创建文件夹
}
else
{
Directory.CreateDirectory(DirAddress + "\\" + s);//文件夹不存在,创建
}
DirectoryInfo DirectoryArray = new DirectoryInfo(DirectoryPath);
FileInfo[] Files = DirectoryArray.GetFiles();//获取该文件夹下的文件列表
DirectoryInfo[] Directorys = DirectoryArray.GetDirectories();//获取该文件夹下的文件夹列表
foreach (FileInfo inf in Files)//逐个复制文件
{
File.Copy(DirectoryPath + "\\" + inf.Name, DirAddress + "\\" + s + "\\" + inf.Name);
}
foreach (DirectoryInfo Dir in Directorys)//逐个获取文件夹名称,并递归调用方法本身
{
CopyDirectory(DirectoryPath + "\\" + Dir.Name, DirAddress + "\\" + s);
}
*/
#endregion

/*public void copyfolder(string strfrompath, string strtopath)
{
//如果源文件夹不存在,则创建
if (!Directory.Exists(strfrompath))
{
Directory.CreateDirectory(strfrompath);
}

//取得要拷贝的文件夹名
string strfoldername = strfrompath.Substring(strfrompath.LastIndexOf("\\") + 1, strfrompath.Length - strfrompath.LastIndexOf("\\") - 1);

//如果目标文件夹中没有源文件夹则在目标文件夹中创建源文件夹
if (!Directory.Exists(strtopath + "\\" + strfoldername))
{
Directory.CreateDirectory(strtopath + "\\" + strfoldername);
}
//创建数组保存源文件夹下的文件名
string[] strfiles = Directory.GetFiles(strfrompath);

//循环拷贝文件
for (int i = 0; i < strfiles.Length; i++)
{
//取得拷贝的文件名,只取文件名,地址截掉。
string strfilename = strfiles[i].Substring(strfiles[i].LastIndexOf("\\") + 1, strfiles[i].Length - strfiles[i].LastIndexOf("\\") - 1);
//开始拷贝文件,true表示覆盖同名文件
File.Copy(strfiles[i], strtopath + "\\" + strfoldername + "\\" + strfilename, true);
}

//创建directoryinfo实例
DirectoryInfo dirinfo = new DirectoryInfo(strfrompath);
//取得源文件夹下的所有子文件夹名称
DirectoryInfo[] zipath = dirinfo.GetDirectories();
for (int j = 0; j < zipath.Length; j++)
{
//获取所有子文件夹名
string strzipath = strfrompath + "\\" + zipath[j].ToString();
//把得到的子文件夹当成新的源文件夹,从头开始新一轮的拷贝
copyfolder(strzipath, strtopath + "\\" + strfoldername);
}
}*/

private void CopyDirectory_(string srcdir, string desdir)
{
string folderName = srcdir.Substring(srcdir.LastIndexOf("\\") + 1);

string desfolderdir = desdir + "\\" + folderName;

if (desdir.LastIndexOf("\\") == (desdir.Length - 1))
{
desfolderdir = desdir + folderName;
}
string[] filenames = Directory.GetFileSystemEntries(srcdir);

foreach (string file in filenames)// 遍历所有的文件和目录
{
if (Directory.Exists(file))// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件
{

string currentdir = desfolderdir + "\\" + file.Substring(file.LastIndexOf("\\") + 1);
if (!Directory.Exists(currentdir))
{
Directory.CreateDirectory(currentdir);
}

CopyDirectory_(file, desfolderdir);
}

else // 否则直接copy文件
{
string srcfileName = file.Substring(file.LastIndexOf("\\") + 1);

srcfileName = desfolderdir + "\\" + srcfileName;


if (!Directory.Exists(desfolderdir))
{
Directory.CreateDirectory(desfolderdir);
}


File.Copy(file, srcfileName);
}
}//foreach
}//function end
}
}

...全文
86 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
一品梅 2012-09-24
  • 打赏
  • 举报
回复
这是文件目录的正则处理,感谢楼主提供了那么好的一篇文章。。。
  • 打赏
  • 举报
回复
你想说什么?

110,825

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧