pkfox Ответов: 1

Различные размеры файлов от C++ до C#


Привет всем, меня только что попросили перенести какой - то старый устаревший код C++ на C#, программа довольно проста-она анализирует некоторые данные из текстового файла и записывает их в другой. Все работает нормально, но - в рамках моего тестирования всякий раз, когда я делаю что-то подобное, я использую функцию сравнения файлов в devenv.exe (думаю, раньше он назывался виндифф )

devenv /diff file1 file2 

и все это хорошо, но-если я делаю байтовое сравнение, оно терпит неудачу, так как файлы имеют разные размеры ( C# один на 128 байт больше)
Есть идеи, ребята ? это не шоу-стопор, мне просто любопытно.

Что я уже пробовал:

Гуглить и публиковать здесь !

F-ES Sitecore

Сделайте это на маленьком файле, а затем изучите байты, чтобы увидеть, в чем разница. Это может быть разница в окончаниях строк, возможно, C++ использует \n, а c# использует \r\n. Мы не можем видеть эти файлы, и мы не знаем, что делает код, поэтому мы не можем оказать большую помощь.

0x01AA

Unicode или Ansi против MBC?

Peter_in_2780

старый файл в стиле DOS с меткой EOF (0x1a, ^Z) и заполнением?

pkfox

Хорошая мысль я попробую

1 Ответов

Рейтинг:
11

RickZeeland

Откройте свои файлы в Блокнот++ редактор, и посмотрите на пункт меню "Кодирование".
Я думаю, что ваш файл C++ находится в ANSI, а ваш файл C# - в Unicode, который использует до 2 байт на символ. Видеть: Юникод-Википедия[^] и C# в глубине: Unicode и .NET[^]
В C# используйте Encoding.ASCII запись в файл в формате ascii.
Вы также можете конвертировать в ASCII:

Encoding ascii = Encoding.ASCII;
Encoding unicode = Encoding.Unicode;
byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);


pkfox

Хорошо я попробую спасибо

RickZeeland

Удачи, кстати. Notepad++ имеет кнопку на панели инструментов "показать все символы", которая может быть полезна для просмотра непечатаемых символов, таких как окончания строк.

0x01AA

5, Отличная ссылка"C# In Depth: Unicode и .NET"

pkfox

Привет Рик включение show all characters with both of the files loaded showed me the header record on my file was some padded to the width of the rest of the file, заголовок на старом файле просто MYCOMPANYNAME20170622 but on mine it was written as "MYCOMPANYNAME20170622 128 spaces go here" thanks for your help