CodeGym /课程 /C# SELF /文件、文件系统和路径的概念

文件、文件系统和路径的概念

C# SELF
第 35 级, 课程 0
可用

1. 入门

文件 —— 就是存储在某个存储设备上的一块数据:硬盘、SSD、U盘,甚至软盘(给你爷爷问个好!)。对用户来说,文件就是能打开、能读、能改还能保存的东西。

在编程里,文件就是带有名字和位置的一串字节。对你这个程序员来说,它就是有名字、有路径(像地址)、有大小、有创建日期等等属性的对象。最重要的是:文件是持久(不会丢)的数据存储。程序运行时内存里的东西,程序一关就没了,但文件还在。

啥是文件系统?

文件系统 —— 就是磁盘上存储和组织文件的方式。它负责回答:文件在哪、怎么找、谁能访问、文件夹(目录)怎么组织、怎么找到文件名和内容。

想象一个超大的柜子,里面有很多抽屉。每个抽屉里有文件夹,每个文件夹里有文件(文档)。你要找C#笔记,就得先打开柜子,找到抽屉,拿出文件夹,再翻到那张纸。文件系统就是这样帮你整理信息的。

常见的文件系统

  • NTFS —— Windows的“原生”文件系统。
  • FAT32、exFAT —— 用于U盘、SD卡、移动硬盘。
  • EXT4 —— Linux上很流行。
  • APFS、HFS+ —— macOS用的。

对C#程序员来说,这些通常不用太关心:.NET把底层细节都封装好了,你只管用“文件/文件夹”这个抽象就行。但有时候知道点也有用。比如NTFS文件名可以有空格和很多特殊符号,FAT32就不行。

2. 目录(文件夹)是怎么组织的

目录(或者叫文件夹)其实就是一种特殊的文件,里面存着其他文件和/或目录的列表。目录树(文件层级结构)就是你熟悉的从根到文件的路径,比如C:\Users\伊万\Documents\MyFile.txt。

  • 根目录 —— 就是磁盘的起点(C:\)。
  • 里面有文件夹(子文件夹),里面又有文件或更多文件夹。

简单画个图:


C:\
 └── Users\
     └── 伊万\
         ├── Documents\
         │    └── MyFile.txt
         └── Pictures\
              └── Cat.jpg

3. 文件路径(file path)是啥?

文件路径 —— 就是文件在目录树里的“地址”。靠它你能唯一定位到某个文件或文件夹。

绝对路径和相对路径

  • 绝对路径: 从文件系统的根开始。
    Windows: C:\Users\伊万\Documents\MyFile.txt
    Linux/macOS: /home/ivan/Documents/MyFile.txt
  • 相对路径: 从当前目录(当前文件夹)开始。
    比如你的程序是从C:\Users\伊万启动的,那相对路径Documents\MyFile.txt也能找到同一个文件。

当前目录 —— 这是个特殊概念:它是所有相对路径的“起点”。程序启动时通常就是.exe文件所在的文件夹,或者你打开控制台时所在的目录。

图解:绝对路径和相对路径


绝对路径                                相对路径

C:\Projects\MyApp\logs\output.txt        logs\output.txt
└─ 磁盘根目录 (C:)                       └─ 相对于启动的MyApp

路径分隔符:\ 和 /

Windows用反斜杠(\),Linux/macOS一般用正斜杠(/)。

现在的.NET两个都支持,但最好别在一个项目里混用。拼路径时一定用专门的API(应用程序接口),别自己手动拼字符串。

4. 程序怎么看文件

.NET里有一堆工具能操作文件。主要有这些:

  • System.IO.File:静态方法,能快速读、写、删、查文件等。
  • System.IO.Directory:类似的方法,操作文件夹。
  • System.IO.FileInfo 和 System.IO.DirectoryInfo:对象封装,能访问文件/文件夹的元数据。
  • System.IO.Path:路径操作小助手(拼路径、取扩展名、文件名等)。

来点例子

检查文件是否存在


using System.IO;

if (File.Exists("data.txt"))
{
    Console.WriteLine("文件找到了!");
}
else
{
    Console.WriteLine("文件没找到!");
}

获取文件大小


var info = new FileInfo("data.txt");
Console.WriteLine($"文件大小: {info.Length} 字节");

这些例子我们后面几节课会详细讲。现在你先看看,感受下就行:)。

5. 有用的小细节

文件元数据:名字、扩展名、大小、日期等

你操作文件时,关心的不只是内容,还有“文件身份证”:

  • 名字 —— 人看的文件名。
  • 扩展名 —— .txt、.jpg、.exe、.cs等:有时候能猜出内容。
  • 大小 —— 字节数。
  • 创建/修改时间 —— 能知道文件啥时候出现、啥时候最后改过。
  • 属性 —— 比如:只读、隐藏、系统文件。

.NET里用FileInfo、DirectoryInfo这些类操作这些信息(后面几节课会讲)。

文件扩展名和格式

文件扩展名 —— 其实就是名字里点后面的那一段。比如document.txt的扩展名是txt。操作系统靠扩展名决定用啥打开(比如.jpg用看图软件,.xls用Excel等)。

但对程序员来说,扩展名只是个提示。真正的文件格式只看内容。你甚至可以用文本方式打开MyCat.jpg,看到一堆乱码(奇怪符号,肯定不是图片)。所以记住:扩展名不是保证,只是约定俗成。

文件读写是怎么回事:基本概念

文件就是一串字节。在C#里操作文件通常包括:

  • 打开文件,读或写(或都做)。
  • 读取数据到内存。
  • 写入新数据到磁盘。
  • 关闭文件 —— 这很重要,不然你会占着系统资源(别人删不了你开的文件)。

现代.NET的API很贴心,比如File类能自动打开、读完就关。但用流(Stream)和大文件时要认真对待(后面会讲)。

跨平台要注意啥

现在的C#基本能在Windows、Linux、macOS上一样跑。但还是有细节要注意。最常见的就是分隔符不一样(\ vs /),还有文件名长度和禁止字符的限制。

所以像Path.Combine和System.IO.Path这些API就是你的好朋友。它们能帮你在任何系统上拼对路径。千万别这样写:


var filePath = "C:\\Users\\Ivan\\data.txt"; // 只适合Windows!

更好的写法:


var filePath = Path.Combine("Users", "Ivan", "data.txt");

怎么知道当前工作目录?

有时候你得知道文件到底会存哪。用这个类就行:


string currentDir = Environment.CurrentDirectory;
Console.WriteLine($"当前目录: {currentDir}");

对了,如果让用户选路径,最好用文件/文件夹选择对话框或者命令行参数。

2
任务
C# SELF, 第 35 级, 课程 0
已锁定
获取文件信息
获取文件信息
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION