• C# 文件的一些基本操作


       近期程序中经常用到一些文件的操作,现在大致整理一下。

    一、 获取文件或文件夹基本信息

    1、获取文件信息,组成一个DataTable信息。

    /// <summary>
        /// 获取指定目录下,文件信息
        /// </summary>
        /// <param name="path">绝对路径</param>
        /// <returns></returns>
        public DataTable GetInfo(string path)
        {
            string fileName = "", fileType = "", capacity = "", editTime = "", dir = "", file = "";
            DataTable dt = new DataTable();
            dt.Columns.Add("fileName");
            dt.Columns.Add("fileType");
            dt.Columns.Add("capacity");
            dt.Columns.Add("editTime");
            dt.Columns.Add("dir");
            dt.Columns.Add("file");
    
            DirectoryInfo di = new DirectoryInfo(path);
            foreach (FileSystemInfo fsi in di.GetFileSystemInfos())
            {
                DataRow nrow = dt.NewRow();
                if (fsi is FileInfo)//如果是文件
                {
                    FileInfo fi = (FileInfo)fsi;
                    fileName = fi.Name;//获取文件名
                    file = fi.FullName;//获取完整目录
                    if (fi.Extension.Length < 1)//如果扩展名小于一
                    {
                        fileType = "";
                    }
                    else
                    {
                        fileType = fi.Extension.Remove(0, 1);//获取文件扩展名
                    }
                    dir = fi.Directory.ToString();
                    capacity = pub.FileCountSize(Convert.ToInt32(fi.Length.ToString()));//计算文件大小
                    editTime = fi.LastWriteTime.ToString();//获取最后一次修改时间
                }
                else  //如果是文件夹
                {
                    di = (DirectoryInfo)fsi;
                    fileName = di.Name;
                    dir = di.FullName;
                    file = "";
                    fileType = "文件夹";
                    capacity = "";
                    editTime = di.LastWriteTime.ToString();
                }
                nrow["fileName"] = fileName;
                nrow["fileType"] = fileType;
                nrow["capacity"] = capacity;
                nrow["editTime"] = editTime;
                nrow["dir"] = dir;
                nrow["file"] = file;
    
                dt.Rows.Add(nrow);
            }
            dt.DefaultView.Sort = "editTime desc";
            return dt;
        }

    2、调用GetInfo方法,展示文件信息,结果如下

    二、递归调用----复制文件到指定目录

    用到一功能,复制一个文件夹下的文件到另一个目录下,文件夹下存在各种文件和文件夹

    复制文件简单直接用File.Copy()就行了,但是文件夹就比较难处理了,因为文件夹里面的内容不定,说不定有文件夹下还有文件夹,这就用到了递归

    什么是递归函数/方法? 
    任何一个方法既可以调用其他方法也可以调用自己,而当这个方法调用自己时,我们就叫它递归函数或递归方法。

    通常递归有两个特点: 
    1. 递归方法一直会调用自己直到某些条件被满足 
    2. 递归方法会有一些参数,而它会把一些新的参数值传递给自己。

    /// <summary>
        /// 拷贝源文件的文件到新文件下(传递的参数路径均为物理路径)
        /// </summary>
        /// <param name="sourcePath">需要拷贝的源文件路径</param>
        /// <param name="savePath">保存的目标文件路径</param>
        /// <param name="isUpdate">如果文件已存在是否覆盖</param>
        /// <returns>true:拷贝成功;false:拷贝失败</returns>
        public bool CopyOldFilesToNew(string sourcePath, string savePath, bool isUpdate)
        {
            if (!Directory.Exists(savePath))
            {
                Directory.CreateDirectory(savePath);
            }
            try
            {
                string[] labDirs = Directory.GetDirectories(sourcePath);//获取文件夹目录
                string[] labFiles = Directory.GetFiles(sourcePath);//获取文件目录
                if (labFiles.Length > 0)
                {
                    for (int i = 0; i < labFiles.Length; i++)
                    {
                        if (isUpdate)//如果文件已存在,则覆盖
                        {
                            if (Path.GetFileName(labFiles[i]) != "wenshu.rar")//排除文件
                            {
                                File.Copy(sourcePath + "\" + Path.GetFileName(labFiles[i]), savePath + "\" + Path.GetFileName(labFiles[i]), true);
                            }
                        }
                        else//如果文件已存在则跳过
                        {
                            if (Path.GetFileName(labFiles[i]) != "wenshu.rar" && !System.IO.File.Exists(savePath + "\" + Path.GetFileName(labFiles[i])))//排除文件
                            {
                                File.Copy(sourcePath + "\" + Path.GetFileName(labFiles[i]), savePath + "\" + Path.GetFileName(labFiles[i]));
                            }
                        }
                    }
                }
                if (labDirs.Length > 0)
                {
                    for (int j = 0; j < labDirs.Length; j++)
                    {
                        if (isUpdate)//如果文件已存在,则覆盖
                        {
                            if (Path.GetFileName(labDirs[j]) != "wenshu")
                            {
                                Directory.GetDirectories(sourcePath + "\" + Path.GetFileName(labDirs[j]));
                                //递归调用
                                CopyOldFilesToNew(sourcePath + "\" + Path.GetFileName(labDirs[j]), savePath + "\" + Path.GetFileName(labDirs[j]), isUpdate);
                            }
                        }
                        else//如果文件已存在则跳过
                        {
                            if (Path.GetFileName(labDirs[j]) != "wenshu" && !Directory.Exists(savePath + "\" + Path.GetFileName(labDirs[j])))
                            {
                                Directory.GetDirectories(sourcePath + "\" + Path.GetFileName(labDirs[j]));
                                //递归调用
                                CopyOldFilesToNew(sourcePath + "\" + Path.GetFileName(labDirs[j]), savePath + "\" + Path.GetFileName(labDirs[j]), isUpdate);
                            }
                        }
                    }
                }
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }

    程序调用

    string path = Server.MapPath("../zfjl/lsh");
    CopyOldFilesToNew(path, Server.MapPath("../zfjl/lsh/wenshu"), false);

     三、整理一下常用的基本操作。

      1、删除指定文件

      //file为绝对路径
      File.Delete(file);

    2、拷贝文件

    string sourceFile = @"c:abc.txt";//源路径
    string targetFile = @"e:	empabc.txt";//目标路径
    bool iscover=true; // true=覆盖已存在的同名文件,false则反之
    System.IO.File.Copy(sourcePath,targetFile,iscover);

    3、判断文件夹是否存在,若不存在则创建。

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

    4、判断文件是否存在

     //file是文件路径,为绝对路径。例如:D:abc.txt
      File.Exists(file)
  • 相关阅读:
    2021牛客暑期多校训练营5
    二分图知识点温习
    Codeforces Round #735 (Div. 2)
    牛客比赛订正(3,4)
    Harbour.Space Scholarship Contest 2021-2022 (Div. 1 + Div. 2) Editorial题解
    关于球的相关知识
    AtCoder Beginner Contest 210题解
    P7077 [CSP-S2020] 函数调用
    偏序问题学习笔记
    P1606 [USACO07FEB]Lilypad Pond G
  • 原文地址:https://www.cnblogs.com/zhangjd/p/7575913.html
Copyright © 2020-2023  润新知