驱动器-目录-文件
c#提供了操作驱动器,目录以及文件的相关类,可以很方便的进行目录文件的操作。
Driveinfo获取驱动器相关信息
以下为获取驱动器信息方法:
// GetDrives() method retrieves the drive names of all logical drives on a computer. DriveInfo[] drives = DriveInfo.GetDrives(); Console.WriteLine(drives.Length); foreach (DriveInfo drive in drives) { if (drive.IsReady) { Console.WriteLine("Drive Name : " + drive.Name); Console.WriteLine("Drive Volume name : " + drive.VolumeLabel); Console.WriteLine("Drive Format : " + drive.DriveFormat); Console.WriteLine("Drive Type : " + drive.DriveType); Console.WriteLine("Drive root directory name : " + drive.RootDirectory); Console.WriteLine("Drive free space: " + drive.AvailableFreeSpace); Console.WriteLine("Total Free space on the drive : " + drive.TotalFreeSpace); Console.WriteLine("Total disk size : " + drive.TotalSize); Console.WriteLine(); } } Console.ReadLine();
获取目录(文件夹)有Directory和DirectoryInfo类,前者为静态方法,后者需要进行构造,构造参数为目录。可以对目录进行移动删除以及获取生成时间等的相关操作。以下代码为获取目录信息以及进行移动。
string path = @"E:\temp\test"; string destination = @"E:\test2"; DirectoryInfo di = new DirectoryInfo(path);//构造 if (!di.Exists) { di.Create(); } else { Console.WriteLine("File already exists!"); } string name = di.CreationTime.ToString();//获取文件夹建立时间; Console.WriteLine(name); if (di.Exists) { di.MoveTo(destination); } //di.MoveTo("D:\\ctest\\test");//文件夹 移动到新位置; //di.Delete(); Console.ReadKey();
对文件操作则有File和FileInfo类,同样前者为静态类,后者需要构造,C#提供了文件复制的方法,但是目录只有移动方法,以下代码为移动目录的方法,思路很简单,采用递归方法,获取要移动目录下的目录和文件,文件可以直接移动,目录则在新目录下即可。
static void CopyDirectory(string srcDir, string desDir) { //检测源目录或者目标目录是否存在 if (!Directory.Exists(srcDir)) { Console.WriteLine("源目录不存在!"); return; } if (!Directory.Exists(desDir)) { Console.WriteLine("目标目录不存在!"); Directory.CreateDirectory(desDir);//目标目录不存在则建立目标文件 } //在目标目录下创建源目录 string folderName;//获取目录:test1 if (srcDir.LastIndexOf("\\") == srcDir.Length - 1)//如果源目录字符串为"E:\\test1\\"形式,则修改为"E:\\test1" { srcDir = srcDir.Remove(srcDir.Length - 1); } folderName = srcDir.Substring(srcDir.LastIndexOf("\\") + 1);//获取目录:test1 string desFolderDir = desDir + "\\" + folderName;//目标目录 if (desDir.LastIndexOf("\\") == desDir.Length - 1)//如果源目录字符串为"E:\\test2\\"形式 { desFolderDir = desDir + folderName; } string[] file = Directory.GetFileSystemEntries(srcDir);//获取目标目录下的文件 foreach (string temp in file) { if (Directory.Exists(temp))//判断目录是否存在,否则则为文件 { string currentDesDir = desFolderDir + "\\" + temp.Substring(temp.LastIndexOf("\\") + 1);//获取子目录 if (!Directory.Exists(currentDesDir))//把test1里的子目录放入test2里test1(放置第一个子目录时连带test1一起建立)里 { Directory.CreateDirectory(currentDesDir); } CopyDirectory(temp, desFolderDir);//把子目录的东西复制到test2相应目录里面。desFolderDir现在不包含temp,但是当递归调用后真正执行时已经包含temp } else //把文件复制到相应位置 { string filePathName = desFolderDir + "\\" + temp.Substring(temp.LastIndexOf("\\") + 1); if (!Directory.Exists(desFolderDir)) { Directory.CreateDirectory(desFolderDir); } File.Copy(temp, filePathName, true); } } }
此外,C#还提供了Path类对整个文件路径进行操作,可以获取路径目录,文件,扩展名等方法。