前面介绍了怎样读取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. python字符串 分片索引

    字符串是字符的有序集合,可以通过其位置来获得具体的元素.在python中,字符串中的字符是通过索引来提取的,索引从0开始. python可以取负值,表示从末尾提取,最后一个为-1,倒数第二个为-2,即 ...

  2. IE每次关闭都提示IE已停止工作

    方法一:打开IE浏览器,点击工具,选择下拉菜单中的internet选项,切换至高级选项卡标签,找到“启用第三方浏览器扩展”选项.把前面的打勾去掉: 方法二:打开IE浏览器,不管是6.0还是更高的版本这 ...

  3. 完美解决ListView中事件ItemCreated中使用ClientID导致插入数据失败

    于昨天晚上看到视频做到这个例子,但是发现始终有错误,在ListView的ItemCreated事件中使用了ClientID则会导致数据插入数据库失败.当点击插入按钮时,网页就像点击F5刷新一样,无任何 ...

  4. 本地推送UILocalNotification(转)

    1.增加一个本地推送 //设置20秒之后 NSDate *date = [NSDate dateWithTimeIntervalSinceNow:]; //chuagjian一个本地推送 UILoca ...

  5. Git Step by Step – (1) Git 简介

    由于工作的需要,代码版本控制工具要从Perforce换成Git.说实话,刚开始真的很不适应,要从一个可以很好的支持用户界面的工具转到一个命令行工具,而且Git中有几百个命令,一下子就傻眼了. 但是经过 ...

  6. [Maven]Maven中的一些基本概念

    Pom文件中的groupId.artifactId.version和name,这三个元素定义了一个项目的基本的坐标,在Maven世界中,任何的jar.pom或者war都是基于这些基本的坐标惊醒区分. ...

  7. Kafka配置SSL(云环境)

    本文结合一个具体的实例给出如何在公有云环境上配置Kafka broker与client之间的SSL设置. 测试环境 阿里云机一台(Server端):主机名是kafka1,负责运行单节点的Kafka集群 ...

  8. 来数一数XML解析成为Dataset数据

    最近在看一些接口,所以目标就是写接口啦,但是我想说的是公司的业务还不曾了解,所以自己先来做一个小小的demo练习吧,主要知道需要和xml有关系的,但是之前从来没有接触过解析xml文件的,在玩撒谎能够搜 ...

  9. Linux配置示例:配置java环境变量

    1.修改/etc/profile文件   如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题. (1)用文本编辑器打开/etc ...

  10. 分布式实时日志系统(四) 环境搭建之centos 6.4下hbase 1.0.1 分布式集群搭建

    一.hbase简介 HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java.它是Apache软件基金会的Hadoop项目的一部分,运行 ...