0

我正在尝试编写将 TFS 文件(网页)与我们的 Web 服务器上的物理文件进行比较的代码,以确保它们匹配。我有这样的代码,可以将文件从 TFS 提取到流读取器对象中:

(简化示例)

Dim TFSContents as string
Dim ServerFileContents as string
Dim TFSItem As Item
Dim vcs As VersionControlServer

TFSItem = vcs.GetItem(pathtoTFSItem)
' this line gets the text contents of the file in TFS.
TFSContents = New StreamReader(TFSItem.DownloadFile(), System.Text.Encoding.Default).ReadToEnd
' this line gets the text contents of file on web server
ServerFileContents = File.ReadAllText(serverfilepath)

If ServerFileContents.ToString <> TFSContents.ToString Then
  'they are different
else
 ' they are the same
end if

这段代码大部分时间都很好用,但有时它会说两个文件实际上是相同的却是不同的。我发现回车和空格是区别。当我直观地查看我正在比较的两个文件(一个从 TFS 中提取,另一个从文件服务器中提取)时,它们是相同的。当我将我从 TFS 提取的文本写入文件时,然后使用比较器工具将该文件与我的 Web 服务器文件进行比较,它说它们是相同的。

我编写了代码来遍历字符串中的每个字符,并在第一个不同的字符处停止。差异始终是 char(13) 或 char(32)。换句话说,一个文件将有一个空格,而另一个文件有一个回车符。差异总是围绕换行、回车或空格。字符串的长度实际上是不同的也很奇怪(即使在视觉上文本看起来相同)。我假设长度差异与回车符比空格更多有关。?

我认为我的问题与编码有关,但我似乎找不到解决方法。我在创建 streamreader 对象时尝试了不同的编码设置,但这似乎并不重要。

任何人都知道如何将文件文本与存储在 TFS 中的文件文本进行比较而不会出现此问题?请记住,我不想将 TFS 文件写入驱动器。我想在内存中执行此操作,因为我正在遍历许多 TFS 项目并比较它们。

谢谢你的帮助。

4

1 回答 1

1

默认情况下,TFS 会更改添加到源代码管理的文件的编码。请参阅:http: //blogs.msdn.com/b/buckh/archive/2005/09/10/463281.aspx

您可以使用 Item.Encoding 属性获取 TFS 项的编码。请参阅:http: //msdn.microsoft.com/en-us/library/microsoft.teamfoundation.versioncontrol.client.item.encoding.aspx

所以试试这个,

TFSContents = New StreamReader(TFSItem.DownloadFile(), TFSItem.Encoding).ReadToEnd
于 2013-09-13T19:15:17.483 回答