zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C# IO及文件管理

c#文件IO 管理
2023-09-11 14:16:46 时间

一 System.IO

① System.IO名字空间;
② 提供了许多用于;
③ 文件和数据流进行读写操作的类;

二 流的分类

1 Stream类

按存取位置分:FileStream,MemeryStream,BufferedStream;

2 读写类

BinaryReader和BinaryWriter;
TextReader和TextWriter;
StreamReader和StreamWriter;
StringReader和StringWriter;

3 其关系

FileStream fs=new FileStream(@“c:\temp\foo.txt”,FileMode.Create);
StreamWriter writer=new StreamWriter(fs);
在这里插入图片描述

三 文件及文件及管理

1 对文件和文件夹操作的类

① FileInfo 具体的文件;
② File 提供static方法;
③ DirectoryInfo 具体的文件夹;
④ Directory 提供static方法;
⑤ FileSystemInfo 是FileInfo及DirectoryInfo的父类;
⑥ path 文件路径类;

2 显示文件及文件夹的信息

① 使用FileInfo对象,就可以获取文件大小等各种信息;
② 使用DirectoryInfo对象,就可以获取文件夹大小等各种信息;

3 FileInfo对象及属性

1) 建立对象

new FileInfo 文件物理路径;

2)常用属性

① Name 文件名称;
② Extension 文件扩展名;
③ FullName 文件完全路径(物理路径)
④ Length 文件大小,单位为字节
⑤ CreationTime 文件创建时间;
⑥ LastAccessTime 文件上次访问时间;
⑦ LastWriteTime 文件上次修改时间;
⑧ DirectoryName 所在文件夹;
⑨ Attributes 文件属性、如只读、隐藏等;

4 DirectoryInfo 对象及其属性

1) 建立对象

new DirectoryInfo 文件物理路径;

3) 常用的属性:

① Name 文件夹名称;
② FullName 文件夹完全路径(物理路径);
③ CreationTime 文件夹创建时间;
④ LastAccessTime 文件夹上次访问时间;
⑤ LastWriteTime 文件夹上次修改时间;
⑥ Parent 父文件夹;
⑦ Root 所在根目录;

5 文件的新建、复制、移动和删除

1) 使用File类的static方法既可完成对文件的操作

① Create(filePath);
② Copy(filePath1,filePath2);
③ Move(filePath1,filePath2);
④ Delete(filePath);
⑤ Exists(filePath);
⑥ CreateText(filePath);

2) 文件夹的新建、移动和删除

使用Directory的static方法可以完成对文件的操作。
① CreateDirectory(DirPath);
② Move(DirPath1,DirPath2);
③ Delete(DirPath);
④ Exists(DirPath);
⑤ GetDirectories(DirPath);
⑥ GetFiles(DirPath);

3) 显示指定文件夹下的子文件夹和子文件

使用Directory
GetDirectories和GetFiles的static方法。
使用DirectoryInfo对象
GetDirectories和GetFiles实例方法;
这两个方法分别返回DirectoryInfo对象数组和FileInfo对象数组。

4) Path类 提供路径的处理

① Combine;
② GetDirectoryName;
③ GetExtension;
④ GetFileName;
⑤ GetFileNameWithoutExtension;
⑥ GetFullPath;
⑦ GetPathRoot;
⑧ GetTempFileName;
⑨ GetTempPath;

搜索文件夹下所有的文件
递归列出所有文件

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 递归列出所有文件
{
    class Program
    {
        public static void Main(string[] args)
        {
            ListFiles(new DirectoryInfo(@"C:\Users\quyua\Desktop\200个WinForm实例源码"));
            Console.ReadKey();
        }

        public static void ListFiles(FileSystemInfo info)
        {
            if (!info.Exists)
                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)  //是文件
                {
                    Console.WriteLine(file.FullName + "\t" + file.Length);
                }
                else//是目录
                {
                    ListFiles(files[i]);//对于子努力,进行递归调用
                }
            }
        }
    }
}

监视文件的变化Watcher

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 监视文件的变化Watcher
{
    public class Program
    {
        public static void Main()
        {
            const string path = @"C:\Users\quyua\Desktop\200个WinForm实例源码";

            FileSystemWatcher watcher = new FileSystemWatcher();

            watcher.Path = path;
            watcher.Filter = "*.exe";

            watcher.NotifyFilter = NotifyFilters.LastAccess |
                NotifyFilters.LastWrite | NotifyFilters.FileName |
                NotifyFilters.DirectoryName;

            //事件处理函数
            watcher.Changed += new FileSystemEventHandler(OnChanged);
            watcher.Created += new FileSystemEventHandler(OnChanged);
            watcher.Deleted += new FileSystemEventHandler(OnChanged);
            watcher.Renamed += new RenamedEventHandler(OnRenamed);

            //开始监视
            watcher.EnableRaisingEvents = true;

            //等待用户输入q才结束程序
            Console.WriteLine("Press 'q' to quit the sample.");
            while (Console.Read() != 'q') ;
            Console.ReadKey();
        }
        //事件处理函数
        public static void OnChanged(object source,FileSystemEventArgs e)
        {
            //显示哪些文件做了何种修改
            Console.WriteLine("File:" + e.FullPath + " " + e.ChangeType);
        }

        public static void OnRenamed(object source ,RenamedEventArgs e)
        {
            //显示被更改的文件名
            Console.WriteLine("File:{0}renamed to{1}", e.OldName, e.FullPath);
        }
    }
}