C#成神之路<17> C#使用磁盘数据文件(1)
发布日期:2021-05-07 18:45:04 浏览次数:10 分类:精选文章

本文共 6660 字,大约阅读时间需要 22 分钟。

C# 文件和目录处理:从基础到高级

C#中的文件和目录处理是开发人员在编写应用程序时常用的功能。它允许程序能够读取、写入、删除文件,以及创建、删除目录等操作。这些功能主要由 System.IO 命名空间 提供,包含了丰富的类和方法,帮助开发人员高效地管理文件和目录。


1. DriveInfo 类

DriveInfo 类用于获取计算机驱动器的信息。它包含多个方法和属性,能够返回驱动器的详细信息,如驱动器类型、格式、大小、可用空间等。

方法和属性:

  • GetDrives():返回一个包含所有逻辑驱动器的数组。
  • AvaliableFreeSpace:以字节为单位返回驱动器上的可用磁盘空间。
  • DriveFormat:返回驱动器的格式(如 NTFS 或 FAT32)。
  • DriveType:返回驱动器的类型(固定、可移动、RAM 等)。
  • Name:返回驱动器的名称。
  • TotalFreeSpace:返回驱动器上未用空间的总量。
  • TotalSize:返回驱动器的总大小。

示例:

using System;using System.IO;class Program{    static void Main()    {        DriveInfo myDrive = new DriveInfo("C");        Console.WriteLine("驱动器名:{0}", myDrive.Name);        Console.WriteLine("驱动器类型:{0}", myDrive.DriveType);        Console.WriteLine("驱动器格式:{0}", myDrive.DriveFormat);        Console.WriteLine("总大小:{0} MB", myDrive.TotalSize / 1024);        Console.WriteLine("可用空间:{0} MB", myDrive.AvaliableFreeSpace / 1024);    }}

2. Directory 类

Directory 类用于管理目录(文件夹)的操作。它提供了创建、删除、检查目录存在性、获取目录信息等功能。

方法和属性:

  • CreateDirectory():创建指定路径的目录。
  • Delete():删除指定目录。
  • Exists():检查指定目录是否存在。
  • GetCreationTime():返回目录创建的时间(DateTime 类型)。
  • GetCurrentDirectory():获取应用程序当前工作目录。
  • GetFiles():返回指定目录中的文件名。
  • GetLastAccessTime():返回上次访问目录的日期和时间。
  • GetLastWriteTime():返回上次写入目录的日期和时间。
  • GetParent():返回指定目录的父目录。
  • Move():将文件或目录移动到新位置。
  • SetCreationTime():设置目录创建的时间。
  • SetLastWriteTime():设置上次写入目录的日期和时间。

示例:

using System;using System.IO;class Program{    static void Main()    {        string startingPath = @"C:\Users\Username\Documents";        Directory.CreateDirectory(startingPath); // 创建目录        if (!Directory.Exists(startingPath))        {            Console.WriteLine("目录不存在");            return;        }        FileInfo[] files = Directory.GetFiles(startingPath); // 获取目录中的文件        foreach (FileInfo file in files)        {            Console.WriteLine("文件名:{0}", file.Name);            Console.WriteLine("文件路径:{0}", file.FullName);            Console.WriteLine("文件扩展名:{0}", file.Extension);            Console.WriteLine("文件长度:{0} KB", file.Length / 1024);            Console.WriteLine("文件创建时间:{0}", file.CreationTime);            Console.WriteLine("文件最后访问时间:{0}", file.LastAccessTime);            Console.WriteLine("文件最后写入时间:{0}", file.LastWriteTime);            Console.WriteLine(new string('-', 50));        }    }}

3. DirectoryInfo 类

DirectoryInfo 类是一个更高级的类,用于获取和管理目录的详细信息。它提供了与 Directory 类类似的方法,但功能更为强大。

方法和属性:

  • Create():创建指定路径的目录。
  • CreateSubdirectory():创建子目录。
  • Delete():删除指定目录。
  • Equals():比较两个 DirectoryInfo 对象。
  • GetDirectories():返回当前目录的子目录。
  • GetFiles():返回当前目录中的文件(重载方法)。
  • GetFileSystemInfos():返回文件和子目录的强类型 FileSystemInfo。
  • MoveTo():将 DirectoryInfo 对象的内容移动到指定路径。
  • Exists:返回一个值,指示某个目录是否存在。
  • Extension:返回文件名的扩展名。
  • FullName:返回目录或路径的完整路径。

示例:

using System;using System.IO;class Program{    static void Main()    {        string startingPath = @"C:\Users\Username\Documents";        DirectoryInfo myDirInfo = new DirectoryInfo(startingPath);        if (!myDirInfo.Exists)        {            Console.WriteLine("目录不存在");            return;        }        DirectoryInfo subDirInfo = myDirInfo.CreateSubdirectory("SubFolder");        Console.WriteLine("子目录路径:{0}", subDirInfo.FullName);        FileInfo file = new FileInfo(@"C:\Users\Username\Documents\file.txt");        file.MoveTo(subDirInfo.FullName + "moved_file.txt");        Console.WriteLine("文件已移动到:{0}", file.FullName);        myDirInfo.Delete();        Console.WriteLine("目录已删除");    }}

4. 文件操作

文件操作主要由 File 类和 FileInfo 类提供。File 类用于高级文件操作,而 FileInfo 类提供了文件的详细信息。

File 类方法:

  • AppendAllText():将文本附加到文件后面(重载方法)。
  • AppendText():用 UTF-8 编码格式附加文本。
  • Copy():复制指定文件。
  • Create():创建新文件。
  • CreateText():创建或打开 UTF-8 编码的文本文件。
  • Delete():删除指定文件。
  • Exists():检查文件是否存在。
  • GetCreationTime():返回文件创建时间。
  • GetLastWriteTime():返回文件最后写入时间。
  • Move():移动文件到新位置。
  • Open():打开文件(支持多种访问模式)。
  • OpenRead():打开用于读取的文件。
  • OpenText():打开用于读取的 UTF-8 文件。
  • OpenWrite():打开用于写入的文件。
  • ReadAllBytes():读取文件内容到字节数组。
  • ReadAllLines():读取文件内容到字符串数组。
  • ReadAllText():读取文件内容到字符串。
  • Replace():用另一个文件的内容替换当前文件的内容。
  • SetAttributes():设置文件的属性。

示例:

using System;using System.IO;class Program{    static void Main()    {        string path = @"C:\Users\Username\Documents\file.txt";        FileStream fs = File.Create(path);        StreamWriter sw = new StreamWriter(fs);        sw.WriteLine("这是一个测试文件");        sw.Close();        fs.Close();        string content = File.ReadAllText(path);        Console.WriteLine(content);        File.Delete(path);        Console.WriteLine("文件已删除");    }}

5. 文件类型

文件可以分为文本文件和二进制文件:

文本文件

  • 包含文本数据的文件,通常以字符编码存储。
  • 优点:易于读取和编辑。
  • 缺点:不能存储二进制数据。

二进制文件

  • 包含二进制数据的文件,通常用于存储图片、音乐、视频等。
  • 优点:存储效率高,不需要转换格式。
  • 缺点:读取和写入速度较慢。

判断文件类型

文件名通常可以反映文件类型。例如:

  • *.txt:文本文件
  • .docx、.xlsx:文档文件
  • .jpg、.png:图像文件
  • .exe、.dll:可执行文件

6. 代码示例

1. 列出目录信息

using System;using System.IO;class Program{    static void Main()    {        string startingPath = @"C:\Users\Username\Documents";        DirectoryInfo myDirInfo = new DirectoryInfo(startingPath);        if (!myDirInfo.Exists)        {            Console.WriteLine("目录不存在");            return;        }        ArrayList dirs = new ArrayList();        clsDirectory myDirs = new clsDirectory();        int count = myDirs.ShowDirectory(myDirInfo, 0, dirs);        foreach (DirectoryInfo dir in dirs)        {            Console.WriteLine("目录名:{0}", dir.Name);            Console.WriteLine("目录路径:{0}", dir.FullName);            Console.WriteLine("目录大小:{0} KB", dir.TotalSize / 1024);            Console.WriteLine("目录创建时间:{0}", dir.CreationTime);            Console.WriteLine("目录最后访问时间:{0}", dir.LastAccessTime);            Console.WriteLine("目录最后写入时间:{0}", dir.LastWriteTime);            Console.WriteLine(new string('-', 50));        }    }}

2. 写入文本文件

using System;using System.IO;class Program{    static void Main()    {        string fileName = @"C:\Users\Username\Documents\ErrorLog.txt";        StreamWriter sw = new StreamWriter(fileName, true);        try        {            DateTime currentDT = DateTime.Now;            sw.WriteLine("{0},{1}:{2}", currentDT.ToShortDateString(),                         currentDT.ToShortTimeString(), "测试消息");            sw.WriteLine("-------------------");            sw.Close();        }        catch (Exception ex)        {            Console.WriteLine("错误:{0}", ex.Message);        }    }}

3. 复制文件

using System;using System.IO;class Program{    static void Main()    {        string sourcePath = @"C:\Users\Username\Documents\file.txt";        string destinationPath = @"C:\Users\Username\Documents\new_file.txt";        if (File.Exists(sourcePath))        {            File.Copy(sourcePath, destinationPath);            Console.WriteLine("文件已复制");        }        else        {            Console.WriteLine("源文件不存在");        }    }}

小结

通过上述内容,可以看出 C# 提供了丰富的文件和目录处理功能,适用于各种应用场景。无论是简单的文件读写,还是复杂的文件管理操作,都可以通过这些类和方法轻松实现。

上一篇:C#成神之路<18> C#使用磁盘数据文件(2)
下一篇:C#成神之路<16> C#泛型

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年03月27日 16时31分59秒