2013-09-06 3 views
0

Я пытаюсь написать код, который будет сравнивать файл TFS (веб-страницу) с физическим файлом на нашем веб-сервере, чтобы убедиться, что они совпадают. У меня есть такой код, который извлекает файл из TFS в StreamReader объект:Файл 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 в файл, а затем использую инструмент сравнения, чтобы сравнить этот файл с файлом веб-сервера, он говорит, что он идентичен.

Я написал код для прокрутки каждого символа в строках и остановки у первого символа, который отличается. Различия всегда char (13) или char (32). Другими словами, у одного файла будет место, где у другого есть возврат каретки. Различия всегда связаны с линейными фидами, возвратами или пробелами. Странно и то, что длина строк фактически различна (хотя визуально текст выглядит одинаково). Я предполагаю, что разница в длине имеет какое-то отношение к возврату каретки, которая больше символов, чем пробел. ?

Я полагаю, что моя проблема связана с кодировкой, но я не могу найти способ обойти это. Я пробовал разные настройки кодировки, когда создаю объект streamreader, но это, похоже, не имеет значения.

У кого-нибудь есть идеи, как я могу сравнить текст файла с текстом файла, хранящегося в TFS, без этой проблемы? Имейте в виду, что я не хочу записывать файл TFS на диск. Я хочу сделать это в памяти, потому что я перебираю множество элементов TFS и сравниваю их.

Благодарим за помощь.

+0

я бы не ожидал проблем кодирования, чтобы привести к изменениям * только * в пробелы ... Тем не менее, почему бы не сравнить побайтно вместо 'ToString'ing ? –

+0

Текстовое кодирование и StreamReader. Если вы хотите проверить равенство, BinaryReader пропустит всю проблему. В противном случае вам нужно показать различия, которые вам нужны, чтобы убедиться, что вы используете ту же кодировку для получения файла из TFS и с диска. –

+0

Отличные комментарии от вас обоих, но как бы я сравнил bytewise ?? Я не могу получить объект binaryreader из вызова downloadfile() в TFS (насколько я могу судить). – kt1

ответ

0

По умолчанию TFS изменяет кодировку файлов, добавленных в исходный элемент управления. См.: http://blogs.msdn.com/b/buckh/archive/2005/09/10/463281.aspx

Вы можете получить кодировку элемента TFS с помощью свойства Item.Encoding. См: http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.versioncontrol.client.item.encoding.aspx

Так что попробуйте это вместо того, чтобы,

TFSContents = New StreamReader(TFSItem.DownloadFile(), TFSItem.Encoding).ReadToEnd