Не полный ответ (я думаю, что он был рассмотрен), но конкретное примечание к имени файла:
Тип Char
, вероятно, не является однобайтовым в C #, поскольку символы .NetUnicode, то есть они поддерживают символьные значения далеко за пределами 255, поэтому интерпретация данных вашего имени файла как массива Char[]
создаст проблемы.Поэтому первым шагом, безусловно, следует прочитать это как Byte[12]
, а не Char[12]
.
Прямое преобразование из байтового массива в массив char также не рекомендуется, хотя, поскольку в двоичных индексах, подобных этому, имена файлов, которыена короче , чем разрешенные 12 символов, вероятно, будут дополнены 0 байтами, поэтому прямое преобразование приведет к строке длиной 12 символов и может заканчиваться этими нулевыми символами.
Однакопростое обрезание этих нулей не рекомендуется, поскольку системы чтения таких данных обычно просто считывают до первого обнаруженного нуля, а данные за , которые в массиве могут фактически содержать мусор, если система записи не 'не пытайтесь специально очистить свой буфер нулями, прежде чем помещать в него строку.Это то, о чем многие программы не беспокоятся, поскольку они предполагают, что система чтения все равно будет интерпретировать строку только до первого нуля.
Итак, если предположить, что это действительно такой типичный конец с нулем (C-style), сохраняемая в кодировке текста по одному байту на символ (например, ASCII или Win-1252), второй шаг - обрезать строку в первом нуле.Вы можете легко сделать это с помощью функции TakeWhile
Линка.Затем третьим и последним шагом является преобразование полученного байтового массива в строку с какой бы то ни было текстовой кодировкой в один байт на символ, с которой он написан:
public String StringFromCStringArray(Byte[] readData, Encoding encoding)
{
return encoding.GetString(readData.TakeWhile(x => x != 0).ToArray());
}
Как я уже сказал, кодировка будетвероятно, это что-то вроде чистого ASCII, к которому можно получить доступ из Encoding.ASCII
, или из Windows-1252, стандартной кодировки текста Windows / Западной Европы Windows, которую вы можете получить с помощью Encoding.GetEncoding("Windows-1252")
.