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:\temp\abc.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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM