前面介绍了怎样读取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)的更多相关文章

  1. TFS二次开发09——查看文件历史(QueryHistory)

    这篇文章给大家展示怎样获取一个文件的历史版本,内容很简单,直接上代码了. string tpcURL = "http://127.0.0.1:8080/"; TfsTeamProj ...

  2. TFS二次开发系列索引

    TFS二次开发11——标签(Label) TFS二次开发10——分组(Group)和成员(Member) TFS二次开发09——查看文件历史(QueryHistory) TFS二次开发08——分支(B ...

  3. TFS二次开发系列:三、TFS二次开发的第一个实例

    首先我们需要认识TFS二次开发的两大获取服务对象的类. 他们分别为TfsConfigurationServer和TfsTeamProjectCollection,他们的不同点在于可以获取不同的TFS ...

  4. TFS二次开发-基线文件管理器(5)-源码文件的读取

      在上一节中,我们在保存标签之前,已经将勾选的文件路径保存到了Listbox中,这里只需要将保存的数据输出去为txt文档就可以做版本控制了.   版本文件比较复杂的是如何读取,也就是如何通过文件路径 ...

  5. TFS二次开发、C#知识点、SQL知识总结目录

    TFS二次开发系列 TFS二次开发系列:一.TFS体系结构和概念 TFS二次开发系列:二.TFS的安装 TFS二次开发系列:三.TFS二次开发的第一个实例 TFS二次开发系列:四.TFS二次开发Wor ...

  6. TFS二次开发系列:七、TFS二次开发的数据统计以PBI、Bug、Sprint等为例(一)

    在TFS二次开发中,我们可能会根据某一些情况对各个项目的PBI.BUG等工作项进行统计.在本文中将大略讲解如果进行这些数据统计. 一:连接TFS服务器,并且得到之后需要使用到的类方法. /// < ...

  7. TFS二次开发的数据统计以PBI、Bug、Sprint等为例(一)

    TFS二次开发的数据统计以PBI.Bug.Sprint等为例(一) 在TFS二次开发中,我们可能会根据某一些情况对各个项目的PBI.BUG等工作项进行统计.在本文中将大略讲解如果进行这些数据统计. 一 ...

  8. TFS二次开发、C#知识点、SQL知识

    TFS二次开发.C#知识点.SQL知识总结目录   TFS二次开发系列 TFS二次开发系列:一.TFS体系结构和概念 TFS二次开发系列:二.TFS的安装 TFS二次开发系列:三.TFS二次开发的第一 ...

  9. TFS二次开发02——连接TFS

    在上一篇<TFS二次开发01——TeamProjectsPicher>介绍了  TeamProjectsPicher 对象,使用该对象可以很简单的实现连接TFS. 但是如果我们要实现自定义 ...

随机推荐

  1. 纯CSS实现瀑布流布局

    https://www.w3cplus.com/css/pure-css-create-masonry-layout.html

  2. NetBpm 测试篇(3)

    http://www.netbpm.org/movie/holiday/holiday.html

  3. 【代码审计】JTBC(CMS)_PHP_v3.0 任意文件上传漏洞分析

      0x00 环境准备 JTBC(CMS)官网:http://www.jtbc.cn 网站源码版本:JTBC_CMS_PHP(3.0) 企业版 程序源码下载:http://download.jtbc. ...

  4. 简单的Excel导入(上传、解析、持久化)

    /** * excel导入 * @param req * @param resp * @return */ public void excelImport(){ //先将要上传的Excel文件上传到项 ...

  5. JS - 查找同辈中的对象

    今天在使用parent().find(".a:first")的时候,发现查找结果非正常按照顺序来的.有点递归的感觉,从底层往上. 因为需要的是同级的对象,所以去查了一下jquery ...

  6. 树莓派3安装opencv2程序无法运行

    在raspberry pi3 上安装opencv3已测试,没有问题,而opencv2报错如下: Xlib: extension "RANDR" missing on display ...

  7. java基础---->java的新特性(一)

    通过简单的实例来感觉一下java7和java8的新特性.当那条唯捷径省略了朝拜者,我便在一滴花露中瞬间彻悟. java7代码实例 一.java7中switch中可以字符串 @Test public v ...

  8. win7 64位系统下读写access数据库以及安装了office32位软件再安装64位odbc的方法

    公司一款软件还在读写access数据库. 问题是我的电脑是win7 64位, 运行程序会报错, 出错信息很明显, 大意是ODBC数据源读写出错. 因此,我需要下载Access ODBC 64位数据源 ...

  9. 使用Maven命令安装jar包到仓库中

    项目中可能会碰到很多jar包,使用maven update不能更新,或者jar包是拷贝过来,不能编译的情况.此时就需要手动使用命令行安装. 例如Demo项目中提示缺少四个jar包,但是在repo中已经 ...

  10. [原]git的使用(四)---撤销修改

    8.撤销修改 $ cat readme.txt Git is a distributed version control system. Git is free software distribute ...