前言
阅读项目编辑器的代码时,发现好多与文件(夹)路径相关代码。本来自己之前对路径相关的东西就模模糊糊,希望通过这篇笔记能让自己模糊的地方明朗一下。
" / " 与 " \ "
你是否有过这样的疑惑:Windows电脑上的文件路径是"E:\Project\unityruntime\Assets",使用的是反斜杠\。而C#或Unity中文件的代码路径是"E:/Project/unityruntime/Assets",使用的是正斜杠/。其实道理是一样的,都是作为路径分隔符,只是不同平台或语言环境使用的字符不同。大多数 .NET/Unity 的路径处理函数都能识别混合的斜杠方向,包括同时出现正斜杠 / 和反斜杠 \ 的情况。系统会在内部把它们视作有效的路径分隔符,通常不会报错。
Application.dataPath
顺便提一嘴"Application.dataPath",此为Unity资产Assets目录。
特别注意:
后面路径开头要带正斜杠" / "。
string filePath = Application.dataPath + "/../../策划文档/Config";
/. 与 /..
" /. " 代表当前目录。
" /. ." 代表上级目录。
Path类
1).GetFullPath方法
把给定的路径规范化成一个唯一、规范的绝对路径。
我的理解就是将不明确的路径重构,转换成一个完整、明确的绝对路径。
2).Combine方法
路径拼接。
Debug.Log($"{Path.Combine(Application.dataPath, "/TestFloder")}");
### 打印信息:/TestFloder
### 问题原因:
### Path.Combine 在遇到以斜杠开头的路径段时,会把它当成绝对路径来处理,前面的部分会被丢弃,直接返回第二段的绝对路径。### 问题修改:去掉正斜杠
### Debug.Log($"{Path.Combine(Application.dataPath, "TestFloder")}");
### 打印信息:F:/Demo/NewTestDemo/Assets\TestFloder
意外发现:在Log拼接后的路径的时候发现.Net/Unity能识别正反斜杠混合的路径。
Directory类
DirectoryInfo类
DirectoryInfo directory = new DirectoryInfo(dirPath);
FileInfo[] files = directory.GetFiles("*.json", SearchOption.TopDirectoryOnly);
如果你想操作“dirPath”路径的文件夹,首先new一个“dirPath”路径的“DirectoryInfo”文件夹操作对象。
" *.json "匹配文件后缀为json的文件。
" SearchOption.TopDirectoryOnly "为操作的对应目录层级,此处代表"dirPath"目录的文件。若改为"SearchOption.AllDirectories",则会递归搜索"dirPath"目录及所有子目录中的符合条件的文件。
File类
1).Copy方法
File.Copy 的两个参数 sourceFileName 和 destFileName 都可以是绝对路径,也可以是相对路径。
- sourceFileName
- 源文件的路径。可以是相对路径或绝对路径。路径必须指向一个现有的文件,否则会抛出 System.IO.FileNotFoundException。
- destFileName
- 目标文件的路径。可以是一个新的文件路径,也可以是已存在的文件路径(当 overwrite 为 true 时会覆盖)。
- 目标路径所在的目录需要存在;如果目录不存在,会抛出 DirectoryNotFoundException。你可能需要在复制前确保目录存在,必要时用 Directory.CreateDirectory。
- overwrite
- 指定是否覆盖目标文件。默认重载在不传 overwrite 时为 false(不覆盖)。
- 如果目标文件存在且 overwrite 为 false,会抛出 IOException。
- 如果 overwrite 为 true,目标文件存在时会被覆盖。
FileInfo类
FileInfo类的实例对象FullName表示文件的完整路径(绝对路径)。