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}");
对了,如果让用户选路径,最好用文件/文件夹选择对话框或者命令行参数。
GO TO FULL VERSION