为了便于处理文件路径,以及兼容处理Windows和Linux,封装了路径扩展PathHelper

Nuget包:NewLife.Core

源码:https://github.com/NewLifeX/X/blob/master/NewLife.Core/IO/PathHelper.cs

视频:https://www.bilibili.com/video/BV1gq4y1g78w

视频:https://www.bilibili.com/video/BV1oN4y1A7jo

最佳实践

任何类型.NET项目,引用 NewLife.Core 包以及添加System.IO命名空间后,都可以使用以下方法获取绝对路径。

var dir = "../cube".GetFullPath();

相对路径转全路径

相对路径转绝对完全路径有很深的讲究,这里要分三种情况考虑。

同时,以下方法全部支持Windows和Linux路径。两种系统中,路径分隔符不相同,但不管应用代码中使用哪一种路径分隔符,经过以下方法后,都将转换为当前操作系统兼容的路径。

这些方法是我们所有系统能够平滑从Windows过渡到Linux的根本保障。

GetBasePath 依赖BasePath,支持参数和环境变量设置,主要用于存放X组件自身配置和日志等目录。

GetFullPath 依赖BaseDirectory,默认为应用程序域基础目录,支持参数和环境变量设置,此时跟GetBasePath保持一致。

GetFullPath更多用于表示当前工作目录,不可以轻易修改为Environment.CurrentDirectory。

在vs运行应用时,Environment.CurrentDirectory是源码文件所在目录,而不是可执行文件目录。

在StarAgent运行应用时,BasePath和Environment.CurrentDirectory都被修改为工作目录。

GetFullPath

获取文件或目录基于应用程序域基目录的全路径,过滤相对目录。(顶级推荐!!!

不确保目录后面一定有分隔符,是否有分隔符由原始路径末尾决定。

该方法最常用,绝大多数情况下,相对路径都是相对于当前应用程序所在目录。

应用程序域基路径,AppDomain.CurrentDomain.BaseDirectory

基于BaseDirectory,可以通过程序参数-BasePath {mypath}指定,也可以通过环境变量BasePath指定。

推荐使用该方法!


GetBasePath

获取文件或目录基于BasePath的全路径,过滤相对目录。

基路径PathHelper.BasePath默认也是应用程序域基路径,AppDomain.CurrentDomain.BaseDirectory

但是它可以通过程序参数-BasePath {mypath}指定,也可以通过环境变量BasePath指定。

基路径用于X组件内部各目录,专门为Docker容器化函数计算而定制。

受影响的内部目录有:Log,Config,Data,Backup

在某些场景中,应用程序没有所在目录的写入权限,需要借助参数把基路径修改到别的可写入目录!

该方法只用于X组件内部,不推荐应用程序使用!

GetCurrentPath

获取文件或目录基于当前目录的全路径,过滤相对目录。

操作系统进程级的当前目录, Environment.CurrentDirectory

极少使用,一般使用GetFullPath替代。主要因为当前目录可以在程序运行过程中由外部改变,从而带来不一致性。


多路径合并CombinePath

很多人使用字符串拼接来合并两个路径,最要命的地方在于分隔符,不是多了就是少了,或者用错了(Windows和Linux分隔符不同)!

该方法支持连续合并多段路径,无需担心分隔符,并且多操作系统兼容


检查并创建目录EnsureDirectory

平时写入文件时,最容易疏忽的就是目录不存在,尽管打开文件时指定了Create,仍然报IO异常。

可以养成一个习惯,在所有需要写入文件之前,都假定目录不存在,用EnsureDirectory先检测一次,如果目录不存在它会自动创建!


文件信息扩展

常用扩展:

  • AsFile,字符串路径转为文件信息FileInfo
  • ReadBytes,从文件中读取数据
  • WriteBytes,向文件写入数据
  • ReadText,从文件读取文本
  • WriteText,向文件写入文本
  • Extract,解压缩文件到目标目录,内部支持zip,其它格式通过外挂7z来支持
  • Compress,压缩文件,内部支持zip,其它格式通过外挂7z来支持


目录信息扩展

常用扩展:

  • AsDirectory,字符串路径转为路径信息 DirectoryInfo
  • GetAllFiles,获取目录内所有符合条件的文件,支持多文件扩展匹配,如*.exe;*.dll;*.config
  • Compress,压缩指定目录,内部支持zip,其它格式通过外挂7z来支持




作者:大石头 发布:2023-06-22 16:46:08 浏览:3,485)