【发布时间】:2013-09-10 22:26:41
【问题描述】:
我正在尝试编写将 TFS 文件(网页)与我们网络服务器上的物理文件进行比较的代码,以确保它们匹配。我有这样的代码,可以将文件从 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 项目并比较它们。
感谢您的帮助。
【问题讨论】:
-
我不希望编码问题会导致 only 更改为空格...不过,为什么不比较字节而不是
ToStringing? -
文本编码和 StreamReader。如果您只想检查相等性,BinaryReader 将跳过整个问题。否则,您是否需要显示所需的差异,以确保从 TFS 和磁盘获取文件时使用相同的编码。
-
你们俩都很棒,但是我如何比较字节呢?我无法从对 TFS 的 downloadfile() 调用中获取 binaryreader 对象(据我所知)。
标签: .net visual-studio-2010 tfs tfs-sdk