0

TFS ファイル (Web ページ) を Web サーバー上の物理ファイルと比較して、それらが一致していることを確認するコードを作成しようとしています。TFS から streamreader オブジェクトにファイルを抽出する次のようなコードがあります。

(簡略化した例)

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

このコードはほとんどの場合うまく機能しますが、2 つのファイルが実際には同じであるのに、異なると表示されることがあります。改行とスペースが違いであることがわかりました。比較している 2 つのファイル (1 つは TFS からプルされ、もう 1 つはファイル サーバーからプル) を視覚的に見ると、それらは同一です。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 に答える