利用递归重命名文件名
公司的工程文档的文件名中包含了很多类似于#号的符号,这种命名方法在操作系统中是合法的,但是上载到sps文档库中的时候就会出现问题,因此,我通过简单的代码将这些符号转换成全角的符号:
private void button2_Click(object sender, System.EventArgs e)
{
if (textBox1.Text=="")
{
MessageBox.Show("请选择相应的目录!");
}
else
{
MessageBox.Show(@"将替换该目录下所有文件名中的非法字符,包括:& ^ % $ # @ 等!");
timer1.Enabled =true;
ListFiles(@textBox1.Text);
MessageBox.Show("更改的文件数为:" +m_nCounter.ToString()+"\r\n "+"文件清单请到日志文件中查阅:log.txt");
pBar1.Value=100;
timer1.Enabled=false;
}
}
private void RePlaceFileName(string OldFileName)
{
bool bFlag=false;
string newFileName=OldFileName;
if (OldFileName.IndexOf("#")>0 )
{
newFileName=OldFileName.Replace("#","#");
bFlag=true;
}
if (OldFileName.IndexOf("~")>0 )
{
newFileName=newFileName.Replace("~","~");
bFlag=true;
}
if (OldFileName.IndexOf("&")>0 )
{
newFileName=newFileName.Replace("&","&");
bFlag=true;
}
if (OldFileName.IndexOf("!")>0 )
{
newFileName=newFileName.Replace ("!","!");
bFlag=true;
}
if (OldFileName.IndexOf("@")>0 )
{
newFileName=newFileName.Replace ("@","@");
bFlag=true;
}
if (OldFileName.IndexOf("$")>0 )
{
newFileName=newFileName.Replace ("$","$");
bFlag=true;
}
if (OldFileName.IndexOf("%")>0 )
{
newFileName=newFileName.Replace ("%","%");
bFlag=true;
}
if (OldFileName.IndexOf("^")>0 )
{
newFileName=newFileName.Replace ("^","︿");
bFlag=true;
}
if (OldFileName.IndexOf("*")>0 )
{
newFileName=newFileName.Replace ("*","*");
bFlag=true;
}
if (OldFileName.IndexOf("(")>0 )
{
newFileName=newFileName.Replace ("(","(");
bFlag=true;
}
if (OldFileName.IndexOf(")")>0 )
{
newFileName=newFileName.Replace (")",")");
bFlag=true;
}
try
{
if (bFlag==true)
{
System.IO.File.Move(OldFileName,newFileName);
TextWriter w = File.AppendText("log.txt");
m_nCounter=m_nCounter+1;
Log(OldFileName+"::"+m_nCounter.ToString(),w);
//Log(str,w);
w.Close();
}
//
MessageBox.Show("OK");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message );
}
}
private void ListFiles(string strPath)
{
try
{
//检查目录名称是否合法
strPath=RePlaceFolderName(strPath);
DirectoryInfo di = new DirectoryInfo(@strPath);
FileSystemInfo[] dirs = di.GetDirectories("*");
//列出当前目录的文件
FileInfo[] rootFiles=di.GetFiles();
foreach(FileInfo rootFile in rootFiles)
{
//MessageBox.Show(rootFile.FullName );
string str=rootFile.FullName.ToString();
RePlaceFileName(str);
}
//***********递归
foreach (DirectoryInfo diNext in dirs)
{
ListFiles(diNext.FullName );
}
}
catch (Exception ex)
{
MessageBox.Show ( ex.Message );
timer1.Enabled =false;
this.Close();
}
}