系列目录

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方法转为绝对路径)

.net持续集成cake篇之常见文件及路径操作的更多相关文章

  1. .net持续集成cake篇之cake介绍及简单示例

    cake介绍 Cake 是.net平台下的一款自动化构建工具,可以完成对.net项目的编译,打包,运行单元测试,集成测试甚至发布项目等等.如果有些特征Cake没有实现,我们还可以很容易地通过扩展Cak ...

  2. .net持续集成cake篇之使用vs或者vscode来辅助开发cake脚本

    使用Visual Studio来开发工具 前面我们都是通过手写或者复制的方法来编写Cake文件,Cake使用的是C#语言,如果仅使用简单的文本编辑器来编写显然效率是非常低下的,本节我们讲解如何使用ca ...

  3. .net持续集成cake篇之cake任务依赖、自定义配置荐及环境变量读取

    系列目录 新建一个构建任务及任务依赖关系设置 上节我们通过新建一个HelloWorld示例讲解了如何编写build.cake以及如何下载build.ps1启动文件以及如何运行.实际项目中,我们使用最多 ...

  4. .net持续集成sonarqube篇之 sonarqube触发webhook

    系列目录 WebHook近些年来变得越来越流行,github,gitlab等代码托管平台都提供webhook功能.关于webhook这里不做详细介绍,大家可以参阅读相关互联网书籍或者材料来更深了解.可 ...

  5. 持续集成高级篇之基于win32-openssh搭建jenkins混合集群(一)

    系列目录 前面的demo我们使用的都是只有一个windows主节点的的jenkins,实际生产环境中,一个节点往往是不能满足需求的.比如,.net项目要使用windows节点构建,java项目如果部署 ...

  6. C# 文件与路径操作

    OpenFileDialog private void btnOpenFileDialog_Click(object sender, EventArgs e) { OpenFileDialog ope ...

  7. 持续集成高级篇之Jekins参数传入与常见任务

    系列目录 有的童鞋可能已经发现,PipeLine项目与自由式项目相比,可配置的项少了很多,比如说环境变量定义,所有步骤完成后执行动作,拉git代码库等.其实这些功能并没有缺,而是配置的方式不一样了,以 ...

  8. .net持续集成sonarqube篇之 sonarqube与jenkins集成(命令模式)

    系列目录 Sonarqube结合Jenkins与常见问题 我们引入sonarqube组件的最终目的是要为整个Ci环境服务的,如果不能集成于当前的Jenkins CI,那么我们做的很多关于sonarqu ...

  9. 持续集成高级篇之Jekins脚本参数化构建

    系列目录 本系列已经很久没有更新了,接前面基础篇,本系统主要介绍jenkins构建里的一些高级特性.包括脚本参数化,Jenkins Pipeline与及在PipeLine模式下如何执行常见的传统构建任 ...

随机推荐

  1. MES系统实施4大关键点,您都知道吗?

    MES是制造企业生产管理信息化的核心,能否成功实施和应用MES是企业实现提高生产效率,降低成本等信息化建设目标的关键所在. 但是,对于信息化基础相对薄弱的中国制造企业来说,MES的复杂性使得企业在进行 ...

  2. maven 学习---使用Maven创建Web应用程序项目

    在本教程中,我们将演示如何使用 Maven 创建一个 Java Web 项目(Spring MVC). 用到的技术/工具: Maven 3.3.3 Eclipse 4.3 JDK 8 Spring 4 ...

  3. Druid连接池使用

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11280540.html 一:DRUID连接池简介 阿里出品的“为监控而生”的数据库连接池,在功能.性能.扩展 ...

  4. Git学习笔记4-分支

    参考链接廖雪峰git教程:https://www.liaoxuefeng.com/wiki/896043488029600/900388704535136 1.分支创建 创建本地分支: $ git b ...

  5. Microsoft Surface 2019新品发布会汇总

    Microsoft Surface 2019 新品发布会汇总 10月2日晚,微软举行了Microsoft Surface 2019秋季新品发布会,本次发布会涉及如下设备内容等: SurfaceLapt ...

  6. 【BZOJ3716】[PA2014]Muzeum(贪心+网络流)

    BZOJ 题意: 在二维网格图中有\(n\)个物品,每个物品有价值:但有\(m\)个警卫看管这些物品,每个警卫面朝\(y\)轴负方向,能看到一定角度(假定能够看到无穷远). 现在每个敬畏有一个贿赂价钱 ...

  7. 201871010107-公海瑜《面向对象程序设计(java)》第八周学习总结

    201871010107-公海瑜<面向对象程序设计(java)>第八周学习总结           项目              内容    这个作业属于哪个课程    https:// ...

  8. LeetCode 53. Maximum Subarray最大子序和 (C++)

    题目: Given an integer array nums, find the contiguous subarray (containing at least one number) which ...

  9. CF1234A Equalize Prices

    洛谷 CF1234A Equalize Prices Again 洛谷传送门 题目描述 You are both a shop keeper and a shop assistant at a sma ...

  10. [LeetCode] 24. Swap Nodes in Pairs 成对交换节点

    Given a linked list, swap every two adjacent nodes and return its head. You may not modify the value ...