Не можете прочитать файл с нулевыми байтами? - PullRequest
1 голос
/ 05 мая 2011

Привет, ребята, я пытаюсь прочитать этот файл, который имеет нулевые байты (00 шестнадцатеричный код) вроде заполнения. Каждый раз, когда я пытаюсь прочитать текст, он останавливается на первом нулевом байте (шестнадцатеричном формате). Кто-нибудь знает, как это обойти?

Ответы [ 3 ]

2 голосов
/ 05 мая 2011

Вам нужно будет прочитать их как двоичные данные, а затем несколько инструкций по этой ссылке для обработки ваших байтовых данных. Удаление завершающих нулей из байтового массива в C #

1 голос
/ 05 мая 2011

Использование Метод File.ReadAllBytes .

0 голосов
/ 17 июня 2016

Вот пример, использующий FileReadAllBytes, для чтения в противном случае «текстового» файла, который содержит шестнадцатеричные нули 00, а также другие специальные символы.

Справочная информация. У старого движка баз данных Borland от Paradox и Delphi дней есть файл конфигурации, называемый либо IDAPI.CFG, либо IDAPI32.CFG. Файл в основном обычный текст, но также содержит символы ASCII от 0 (ноль) до 4. Мне нужно было прочитать этот файл, чтобы определить текущее значение параметра «NET DIR», и пропустить нули.

Подход: 1) Считайте файл как поток байтов, одним большим (или маленьким) глотком в байтовый массив. Важное утверждение byte[filecontents] = File.ReadAllBytes(fileName).

2) Чтение и обработка каждого символа в байтовом массиве. Для каждого персонажа ... * Если ноль, игнорируйте его * Если другой выбранный символ (ASCII 01 - 04) либо игнорирует его, либо преобразует его в другой символ, представляющий его функцию, например, NewLine или знак равенства. * Если другой (например, отображаемый) ASCII-символ, преобразуйте байт обратно в символьную форму и добавьте в выходной построитель строк. Строка кода, которая делает это: textOut.Append((char)fileByte)

        private string GetBDEConfigText(string fileName)
    {
        StringBuilder textOut = new StringBuilder();
        byte[] fileContents = File.ReadAllBytes(fileName);
        foreach (byte fileByte in fileContents)
        {
            switch (fileByte)
            {
                case 0:
                    {
                        // Leave unchanged, strip out binary character
                        break;
                    }
                case 1:
                    {
                        // Leave unchanged, strip out binary character
                        break;
                    }
                case 2:
                    {
                        break;
                    }
                case 3:
                    {
                        textOut.Append(Environment.NewLine);
                        break;
                    }
                case 4:
                    {
                        textOut.Append('=');
                        break;
                    }
                default:
                    {
                        textOut.Append((char)fileByte);
                        break;
                    }
            }
        }
        return textOut.ToString();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...