驱动器-目录-文件

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类对整个文件路径进行操作,可以获取路径目录,文件,扩展名等方法。

 

posted @ 2017-04-24 18:59  81192  阅读(372)  评论(0编辑  收藏  举报