一开始的时候,在想对学校进行升级,电脑里面相关文件夹也要修改(因为文件夹的命名是用班级名称为名),譬如文件夹名为:“中班”,要改成:“大班”
但是问题是,我用语句:DirectoryInfo folders = new DirectoryInfo(@"d:\a");记录文件夹名的时候,是无序的一组DirectoryInfo。
所以不能直接修改文件夹的名字,因为这样快导致异常:文件夹重名。
最后想到建立临时文件夹来解决这个问题。将修改后的文件夹MoveTo临时文件夹目录中,所有的文件夹修改完成后再把内容Copy过去原来的根文件夹下。
参考代码如下:
string item = Guid.NewGuid().ToString();
Directory.CreateDirectory(@"d:\" + item + "");
DirectoryInfo folders = new DirectoryInfo(@"d:\upgrade");
foreach (DirectoryInfo s in folders.GetDirectories())
{
string t = s.ToString();
if (t.IndexOf("大班") == 0) //对毕业班的操作是先备份,然后删除。
{
string time=DateTime.Now.ToString("yyyy年MM月dd HH时mm分ss秒");
Directory.CreateDirectory(@"d:\backup\" + time + "");
s.MoveTo(@"d:\backup\" + time + @"\" + t + "");
}
else {
if (t.IndexOf("中班") == 0)
{
t = t.Replace("中班", "大班");
s.MoveTo(@"d:\" + item + @"\" + t + "");
}
if (t.IndexOf("小班") == 0)
{
t = t.Replace("小班", "中班");
s.MoveTo(@"d:\" + item + @"\" + t + "");
}
}
}
//此处就是关于文件夹的转移问题了。开始的时候google到了方法:Directory.Copy实现文件夹的转移,但是查过之后,没有这个方法,所有还是自己写好了。以下是设计的原本:
using System;
using System.IO;
static class MainClass
{
static void Main(string[] args)
{
DirectoryInfo sourceDir = new DirectoryInfo("c:\\a");
DirectoryInfo destinationDir = new DirectoryInfo("c:\\b");
CopyDirectory(sourceDir, destinationDir);
}
static void CopyDirectory(DirectoryInfo source, DirectoryInfo destination)
{
if (!destination.Exists)
{
destination.Create();
}
// Copy all files.
FileInfo[] files = source.GetFiles();
foreach (FileInfo file in files)
{
file.CopyTo(Path.Combine(destination.FullName,
file.Name));
}
// Process subdirectories.
DirectoryInfo[] dirs = source.GetDirectories();
foreach (DirectoryInfo dir in dirs)
{
// Get destination directory.
string destinationDir = Path.Combine(destination.FullName, dir.Name);
// Call CopyDirectory() recursively.
CopyDirectory(dir, new DirectoryInfo(destinationDir));
}
}
}
以上主要是思路、方法和相关的设计原本,没有直接复制自己的代码。想学习就自己编吧!!!!