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. 但是如果我们要实现自定义 ...
随机推荐
- python中,获取字符串的长度
说明: 与其他的语言一样,有时候需要查看或者说计算字符串的长度.在此记录下python中通过哪个函数实现. 操作过程: 1.通过len()函数返回字符串的长度 >>> text='p ...
- Win7下telnet使用
出于安全考虑,win7已经禁用了telnet这一功能, telnet是明文传输的,安全性很差. 知道了这一点就不奇怪为什么在win7下不能使用telnet了,下面就详细介绍下如何重新开启telnet服 ...
- oracle自定义类型 示例
) ); ---自定义类型传参给存储过程,示例如下: create or replace procedure dropWf is cursor c_tenant is and t.id not in ...
- 8 -- 深入使用Spring -- 7...2 MVC框架与Spring整合的思考
8.7.2 MVC 框架与Spring整合的思考 对于一个基于B/S架构的JAVA EE 应用而言,用户请求总是向MVC框架的控制器请求,而当控制器拦截到用户请求后,必须调用业务逻辑组件来处理用户请求 ...
- 九度 1464:Hello World for U
题目描述: Given any string of N (>=5) characters, you are asked to form the characters into the shape ...
- 胡思乱想 & 胡言乱语
其大无外,其小无内,在数学上是不存在的,有无穷大,又有无限逼近于0而永远不等于0 现实中,人们对事物的认知局限于科学工艺的发展,往小的方面说,在没有显微镜之前,我们能看到的最小的东西莫过于尘埃,其后认 ...
- Selenium 前进和后退
我们平常使用浏览器时都有前进和后退功能, Selenium 也可以完成这个操作,它使用 back() 方法后退,使用 forward() 方法前进 from selenium import webdr ...
- smarty模板文件书写javascript代码
在smarty文件里直接写javascript代码时候,造成500错误. javascript代码有很多的{}在同一行,而{}也是smarty引擎解析模板的关键标识符,smarty将对其进行分析,这时 ...
- CoreData 多表 关联
本文转载至 http://www.jianshu.com/p/e9f3b5e0cd19 1.概念简介 coreData中存在复杂的数据关系时,一张表难以满足需求,此时就需要了解使用coreData多表 ...
- IntelliJ IDEA:Field injection is not recommended
使用IntelliJ IDEA进行开发的时候,code analyze的时候会出现提示“Field injection is not recommended”. stackoverflow上有篇回答: ...