C# 獲取目錄下文件


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1獲取目錄下文件
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //獲取目錄下指定類型的文件集合
            String path = @"../../Views";

            //第一種方法
            var files = Directory.GetFiles(path, "*.txt");

            foreach (var file in files)
            {

                Console.WriteLine(file); //輸出的路徑+名稱
            }

            //第二種方法
            DirectoryInfo folder = new DirectoryInfo(path);//目錄信息


            foreach (FileInfo file in folder.GetFiles("*.txt"))
            {
                Console.WriteLine(file.FullName); //獲取每個文件的所有信息
            }


            //C#遍歷指定文件夾中的所有文件 
            DirectoryInfo TheFolder = new DirectoryInfo(path);
            //遍歷文件夾
            foreach (DirectoryInfo NextFolder in TheFolder.GetDirectories())
            {
                //this.listBox1.Items.Add(NextFolder.Name);
            }
            //遍歷文件
            foreach (FileInfo NextFile in TheFolder.GetFiles())
            {
                //this.listBox2.Items.Add(NextFile.Name);
            }

        }

        public void FindFile(string dirPath) //參數dirPath為指定的目錄
        {
            //在指定目錄及子目錄下查找文件,在listBox1中列出子目錄及文件
            DirectoryInfo Dir = new DirectoryInfo(dirPath);
            try
            {
                foreach (DirectoryInfo d in Dir.GetDirectories())//查找子目錄 
                {
                    FindFile(Dir + d.ToString() + "\\");
                    //listBox1.Items.Add(Dir+d.ToString()+"\");    //listBox1中填加目錄名
                }
                foreach (FileInfo f in Dir.GetFiles("*.---")) //查找文件
                {
                    //listBox1.Items.Add(Dir+f.ToString()); //listBox1中填加文件名
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }

        }



        public void ListFiles(FileSystemInfo info) ////文件系統信息 參數為目錄
        {
            if (info.Exists != true) return; //不存在就返回
            DirectoryInfo dir = info as DirectoryInfo; //這句是否多余???
            if (dir == null) return; //是否是目錄類型
            FileSystemInfo[] files = dir.GetFileSystemInfos(); //返回文件目錄和所有文件
            for (int i = 0; i < files.Length; i++)
            {
                FileInfo file = files[i] as FileInfo;
                if (file != null) //是文件
                {
                    if (file.Extension.Contains("cshtml"))
                    {
                        this.dataGridView1.Rows.Add(file.Name, file.Length);//文件名和大小
                    }
                    Console.WriteLine(file.FullName + "\t " + file.Length); //輸出完整目錄和大小
                }
                //對於子目錄,進行遞歸調用 
                else  //不是文件,是目錄
                {
                    ListFiles(files[i]); // 遞歸
                }
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {

            #region --清空dataGridView
            //清空方法1
            DataTable dt = (DataTable)dataGridView1.DataSource;
            if (dt != null && dt.Rows.Count > 0)
            {
                dt.Columns.Clear();
                dt.Rows.Clear();
                dataGridView1.DataSource = dt;
            }
            //清空方法2
            dataGridView1.Columns.Clear();
            dataGridView1.Rows.Clear();
            #endregion

            #region --添加列
            this.dataGridView1.Columns.Add("0", "文件路徑");//添加列
            this.dataGridView1.Columns.Add("0", "文件大小");
            this.dataGridView1.Columns.Add("0", "是否存在");
            #endregion


            #region --添加行並設置值,
            this.dataGridView1.Rows.Add("第一個字段值", "第二個字段值", "第三個字段值");//添加一行數據
            dataGridView1.Rows[0].Cells[0].Value = "00000000";
            dataGridView1.Rows[0].Cells[1].Value = "11111111";
            dataGridView1.Rows[0].Cells[2].Value = "22222222";
            //或者
            //循環添加行並設置值
            for (int i = 1; i <= 6; i++)
            {
                int index = this.dataGridView1.Rows.Add(); //添加行
                this.dataGridView1.Rows[index].Cells[0].Value = i; //設置值
            }
            #endregion


            ////測試按鈕
            #region --遍歷目錄文件到列表中
            DirectoryInfo folder = new DirectoryInfo("../../Views");//目錄信息
            ListFiles(folder);
            #endregion

            this.dataGridView1.Rows.Add("第一個字段值", "第二個字段值");//未傳參默認為空值.
            //--
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.ReadOnly = true;//只讀屬性
            dataGridView1.AllowUserToAddRows = false; //不顯示出dataGridView1的最后一行空白   

        }
        List<string> resuls = new List<string>();
        private void button3_Click(object sender, EventArgs e)
        {
            //獲得目錄下所有文件 ,並循環讀取內容,
            var files = Directory.GetFiles(@"F:\新建文件夾\20180817");
            for (int i = 0; i < files.Length;i++ )
            {
                var array = File.ReadAllLines(files[i], Encoding.GetEncoding("gb2312")); //打開一個文本文件,讀取文件的所有行,然后關閉該文件。
                string result = string.Join("\r\n", array);//array為數組
                if (result.Contains("xxx"))
                {
                    resuls.Add(files[i]);
                    var path = Application.StartupPath; //\bin\Debug
                    System.IO.DirectoryInfo topDir = System.IO.Directory.GetParent(System.Environment.CurrentDirectory);
                    var path1 = topDir.FullName;  //文件\bin.

                    if (Directory.Exists(path1+"\\temp") == false)//如果不存 就創建,
                    {
                        Directory.CreateDirectory(path1 + "\\temp");
                    }

                    if (File.Exists(files[i]))//必須判斷要復制的文件是否存在
                    {
                        File.Copy(files[i], path1 + "\\temp\\" + Path.GetFileName(files[i]), true);//三個參數分別是源文件路徑,存儲路徑,若存儲路徑有相同文件是否替換
                    }
                }
            }
            //重復的csv名稱,讀取后,歸類, 上傳

            MessageBox.Show("完成");
        }

        /// <summary>
        /// 復制文件夾中的所有內容
        /// </summary>
        /// <param name="sourceDirPath">源文件夾目錄</param>
        /// <param name="saveDirPath">指定文件夾目錄</param>
        public void CopyDirectory(string sourceDirPath, string saveDirPath)
        {
            try
            {
                if (!Directory.Exists(saveDirPath)) //判斷路徑是否存在
                {
                    Directory.CreateDirectory(saveDirPath);//不存在 創建
                }
                string[] files = Directory.GetFiles(sourceDirPath);//返回指定路徑下的所有文件
                foreach (string file in files)
                {
                    string pFilePath = saveDirPath + "\\" + Path.GetFileName(file);
                    if (File.Exists(pFilePath))//文件是否存在
                        continue; 
                    File.Copy(file, pFilePath, true);//復制文件
                }

                string[] dirs = Directory.GetDirectories(sourceDirPath);//返回指定目錄下的子文件夾
                foreach (string dir in dirs)
                {
                    CopyDirectory(dir, saveDirPath + "\\" + Path.GetFileName(dir)); //GetFileName獲得文件夾名稱
                }
            }
            catch (Exception ex)
            {
                //if (File.Exists(pLocalFilePath))//必須判斷要復制的文件是否存在
                //{
                //    File.Copy(pLocalFilePath, pSaveFilePath, true);//三個參數分別是源文件路徑,存儲路徑,若存儲路徑有相同文件是否替換
                //}
            }
        }   
    }
}

 


免責聲明!

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



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