【问题标题】:TFS file compared to physical file - encoding issue?TFS 文件与物理文件相比 - 编码问题?
【发布时间】: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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    相关资源
    最近更新 更多