.net持续集成cake篇之常见文件及路径操作
Cake常见文件和路径操作
在自动化构建任务里,很多操作都是跟文件打交道,比如文件打包,文件压缩,文件归档,文件传输,目录清理等.本节介绍一些cake里常见的文件操作方法
Cake相对路径问题
做过自动化的同学可能都知道,使用相对路径时,脚本在测试时的相对路径往往和正式环境中不一样,宿主环境的路径往往最终导致明明测试好的脚本最终却出现各种路径问题.但是如果把路径写成绝对路径往往又造成脚本通用性不强,每迁移到一个新项目就需要重新修改脚本文件,对脚本的修改往往意味着导致脚本出错的风险.而Cake的相对路径机制则恰恰解决了相对路径因宿主环境而改变的问题,也就是说只要目录或者文件的相对关系是固定的,相对路径就不会出现问题.
在Cake里 相对路径都是以build.ps1文件为参照而形成的相对路径
,因此只要文件和目录的结构不变,cake里的相对路径就不会有问题.
相对路径转绝对路径
可能有些操作可能不支持相对路径,这时候就要把相对路径转换成绝对路径,Cake里提供了一个MakeAbsolute
方法接收一个DirectoryPath或者FilePath参数,把目录/文件的相对路径转换为绝对路径
以下示例把当前路径(build.ps1所在路径)转换成绝对路径
var path=MakeAbsolute(new DirectoryPath("./"));
注意,如果是想要把文件的相对路径转为绝对路径,则需要传入一个new Filepath("文件名")对象.
文件操作
文件重命名
文件重命名和普通通过重命名方法一样,就是把一个文件原地复制,把名字改掉,在Cake里可以通过CopyFile方法来实现
CopyFile("./bin/debug/buildDemo.pdb","./bin/debug/demo.pdb");
以上示例把buildDemo.pdb重命名为demo.pdb
拷贝文件夹
拷贝文件夹可以通过CopyDirectory
指定要拷贝的文件夹和要拷贝到的目录即可.
拷贝文件夹没没有排除选项,而是完整把一个文件夹拷贝到另一个地方
把文件复制到文件夹
可以通过CopyFiles()
方法把文件拷贝到一个文件夹,它接收一个IEnumerable类型选项,包含的是文件路径,我们可以通过GetFiles()
方法获取所有文件,然后通过where过滤掉特定类型,最后把特定的文件复制到指定文件夹
复制文件和文件夹的方法都以copy开头,如果是想要移动文件或者文件夹,方法一般都是以
Move
开头
压缩文件/解压文件
可能通过Zip方法把文件进行压缩,并且可以指定一个IEnumerable类型的FilePath集合,指定只压缩特定的文件
对应地,解压方法为
Unzip
删除文件/文件夹
有DeleteDirectory(s)
和DeleteFile(s)
方法
清空文件夹
CleanDirectory(s)
方法
目录/文件是否存在
DirectoryExists/FileExists
方法
实践中往往需要检测文件夹是否存在,如果不存在则创建,此时可以使用
EnsureDirectoryExists
方法
相对路径计算
有时候我们获得到了两个文件或者目录的位置,此时如何想要获取它们之间的相对位置,可以通过DirectoryPath
对象里的GetRelativePath
来计算,需要注意的是计算相对路径的两个路径必须都是绝对路径,(如果是 相对路径,我们可以很容易地通过MakeAbsolute方法转为绝对路径)