Я пытаюсь написать код, который будет сравнивать файл 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 и сравниваю их.
Благодарим за помощь.
я бы не ожидал проблем кодирования, чтобы привести к изменениям * только * в пробелы ... Тем не менее, почему бы не сравнить побайтно вместо 'ToString'ing ? –
Текстовое кодирование и StreamReader. Если вы хотите проверить равенство, BinaryReader пропустит всю проблему. В противном случае вам нужно показать различия, которые вам нужны, чтобы убедиться, что вы используете ту же кодировку для получения файла из TFS и с диска. –
Отличные комментарии от вас обоих, но как бы я сравнил bytewise ?? Я не могу получить объект binaryreader из вызова downloadfile() в TFS (насколько я могу судить). – kt1