TFS二次开发05——下载文件(DownloadFile)
前面介绍了怎样读取TFS上目录和文件的信息,怎么建立服务器和本地的映射(Mapping)。
本节介绍怎样把TFS服务器上的文件下载到本地。
下载文件可以有两种方式:
using Microsoft.TeamFoundation.VersionControl.Client;
using Microsoft.TeamFoundation.Client;
方式一:使用VersionControlServer对象,如:
string tpcURL = "http://192.168.83.62:8080";
TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(tpcURL));
VersionControlServer version = tpc.GetService(typeof(VersionControlServer)) as VersionControlServer;
version.DownloadFile("$/MySolution", "D:\\TFS\\MySolution"); //从服务器上下载最新版本
VersionSpec spec = new ChangesetVersionSpec();
version.DownloadFile("$/MySolution", , spec, "D:\\TFS\\MySolution"); //从服务器上下载指定版本
//VersionSpec有如下几个子类:
// ArtifactVersionSpec
// LabelVersionSpec
// DateVersionSpec
// WorkspaceVersionSpec
如果您使用过TFS那么看到下图就能明白上面几个子类的意义了。

方式二:使用Microsoft.TeamFoundation.VersionControl.Client.Item对象,如:
ItemSet items = version.GetItems(serverPath, RecursionType. Full); //最新版
//ItemSet items = version.GetItems(serverPath,spec, RecursionType.OneLevel); //指定版本
foreach (Item item in items.Items)
{
if (item.ItemType == ItemType.File)
{
item.DownloadFile(fileFullName); //下载到本地文件
/Stream stream = item.DownloadFile(); //以流的形式返回
}
}
从上面的代码我们可以看出服务器上的文件或文件夹可以下载到本地任意目录,但在实际应用中,我们要把它们下载到已做过映射的路径下。因为没有映射(Mapping),我们后期对文件所做的操作就无法签入(CheckIn)到服务器。
结合前面所介绍的Workspace和mapping 我们来看一段完整的代码: /// <summary>
/// 这段代码从零开始完整地演示了从TFS上下载文件到本地的过程
/// </summary>
void DownloadFilesFromTFS()
{
//第一步:连接到TFS服务器
string tpcURL = "http://192.168.83.62:8080";
TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(tpcURL));
VersionControlServer version = tpc.GetService(typeof(VersionControlServer)) as VersionControlServer;
//第二步:创建工作区(Worksapce),如果已经存在就不创建
string worksapce = "WorkSpaceTest01";
Workspace ws;
Workspace[] wss = version.QueryWorkspaces(worksapce, Environment.UserName, Environment.MachineName);//查询工作区
if (wss.Length == )
{
ws = version.CreateWorkspace(worksapce);//创建工作区
}
else
{
ws = wss[];
}
#region 将$/MySolution/CommDll下的所有文件夹和文件 下载到本地"E:\\TFS62\\MySolution\\CommDll" 下面
string serverPath = "$/MySolution/CommDll";
string savePath = "E:\\TFS62\\MySolution\\CommDll";
//第三步:获取最新版本,也可以使用GetItems其他重载获取特定版本
ItemSet items = version.GetItems(serverPath, RecursionType.Full);
foreach (Item item in items.Items)
{
string serverItem = item.ServerItem; //如:$/MySolution/CommDll/CommDll.sln
string localItem = savePath + serverItem.Substring(serverPath.Length); //存储到本地的路径
localItem = localItem.Replace("/", "\\");
//第四步:做映射(Mapping)
if (!ws.IsServerPathMapped(serverItem))
{
ws.Map(serverItem, localItem);
}
//第五步:创建目录或下载文件
if (item.ItemType == ItemType.Folder)
{
if (!Directory.Exists(localItem)) //如果目录不存在则创建
{
Directory.CreateDirectory(localItem);
}
}
else if (item.ItemType == ItemType.File)
{
item.DownloadFile(localItem); //下载到本地文件
}
}
#endregion
}
TFS二次开发05——下载文件(DownloadFile)的更多相关文章
- TFS二次开发09——查看文件历史(QueryHistory)
这篇文章给大家展示怎样获取一个文件的历史版本,内容很简单,直接上代码了. string tpcURL = "http://127.0.0.1:8080/"; TfsTeamProj ...
- TFS二次开发系列索引
TFS二次开发11——标签(Label) TFS二次开发10——分组(Group)和成员(Member) TFS二次开发09——查看文件历史(QueryHistory) TFS二次开发08——分支(B ...
- TFS二次开发系列:三、TFS二次开发的第一个实例
首先我们需要认识TFS二次开发的两大获取服务对象的类. 他们分别为TfsConfigurationServer和TfsTeamProjectCollection,他们的不同点在于可以获取不同的TFS ...
- TFS二次开发-基线文件管理器(5)-源码文件的读取
在上一节中,我们在保存标签之前,已经将勾选的文件路径保存到了Listbox中,这里只需要将保存的数据输出去为txt文档就可以做版本控制了. 版本文件比较复杂的是如何读取,也就是如何通过文件路径 ...
- TFS二次开发、C#知识点、SQL知识总结目录
TFS二次开发系列 TFS二次开发系列:一.TFS体系结构和概念 TFS二次开发系列:二.TFS的安装 TFS二次开发系列:三.TFS二次开发的第一个实例 TFS二次开发系列:四.TFS二次开发Wor ...
- TFS二次开发系列:七、TFS二次开发的数据统计以PBI、Bug、Sprint等为例(一)
在TFS二次开发中,我们可能会根据某一些情况对各个项目的PBI.BUG等工作项进行统计.在本文中将大略讲解如果进行这些数据统计. 一:连接TFS服务器,并且得到之后需要使用到的类方法. /// < ...
- TFS二次开发的数据统计以PBI、Bug、Sprint等为例(一)
TFS二次开发的数据统计以PBI.Bug.Sprint等为例(一) 在TFS二次开发中,我们可能会根据某一些情况对各个项目的PBI.BUG等工作项进行统计.在本文中将大略讲解如果进行这些数据统计. 一 ...
- TFS二次开发、C#知识点、SQL知识
TFS二次开发.C#知识点.SQL知识总结目录 TFS二次开发系列 TFS二次开发系列:一.TFS体系结构和概念 TFS二次开发系列:二.TFS的安装 TFS二次开发系列:三.TFS二次开发的第一 ...
- TFS二次开发02——连接TFS
在上一篇<TFS二次开发01——TeamProjectsPicher>介绍了 TeamProjectsPicher 对象,使用该对象可以很简单的实现连接TFS. 但是如果我们要实现自定义 ...
随机推荐
- varchar和nvarchar的区别 数据来证明
如果一个数据是"N好"数据类型是varchar时: select len(vartest) from testselect datalength(vartest) from tex ...
- linux sed在某些字符串的下一行插入内容?sed在下一行插入?
需求描述: 今天在配置nrpe的时候,使用到了在搜索到某些字符串之后,然后在字符串的下一行进行插入字符串 在此记录下如何实现. 即通过sed的a命令实现内容的追加. 操作过程: 1.查看原文件中的内容 ...
- 基金、社保和QFII等机构的重仓股排名评测
来源:基金前20大重仓股持仓股排名 基金前15大重仓股持仓股排名 基金重仓前15大个股,相较于同期沪深300的平均收益,近1月:-1.05%,近3月:-0.49%,近6月:1.45%,近1年:3.92 ...
- 将文件导入到SQL server数据库表中的字段中
一.在要执行的sql server数据库a中执行如下脚本,创建存储过程sp_textcopy /* 将二进制文件导入.导出到数据库相应字段列中 */ CREATE PROCEDURE sp_textc ...
- js获取图片原始大小
摘要: 浏览器中显示的图片大小未必是他真实的高和宽,比如像下面这样,我们给他加上宽和高的样式 <img src="IE.png" style="width:25px ...
- Go之函数直接实现接口
//1.定义一个接口 type Run interface { Runing() } //2.定义一个函数类型 type Runer func() //3.让函数直接实现接口 func (self R ...
- mysql 查询锁表
1)使用情景“判断通过后写入数据库”,这个一般是不会有问题的, 但并发访问的时候就不太好搞.因为写入(insert)是需要时间的,假设现在有两个并发请求,(假设第一个访问是最后一个符合条件的写入请求, ...
- PostgreSQL逻辑复制之slony篇
Slony是PostgreSQL领域中最广泛的复制解决方案之一.它不仅是最古老的复制实现之一,它也是一个拥有最广泛的外部工具支持的工具,比如pgAdmin3.多年来,Slony是在PostgreSQL ...
- ASP正则匹配方法
方法二:找到匹配的进行替换 ip="127.0.0.1" Function ReplaceTest(str,patrn, replStr) Dim regEx, str1 Set ...
- SaltStack 批量分发目录
这里演示如何将 salt-master 上的目录批量分发到多台 salt-minion,步骤如下: [root@localhost ~]$ cat /srv/salt/top.sls # 先定义入口配 ...