Запись файла с именем устройства
3476 просмотра
2 ответа
Я столкнулся с чем-то любопытным. У меня есть декомпилятор, который извлекает информацию из двоичного файла. Я извлекаю серию объектов, которые мне нужно записать отдельно на диск в виде двоичных файлов. Эти объекты являются графическими моделями, скомпилированными в библиотеку. Объекты имеют встроенные имена, и мне нужно использовать это имя в качестве имени файла.
Я использую :
try {
// Open file for reading .
using (var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write)) {
// Writes a block of bytes to this stream using data from a byte array. .
fileStream.Write(byteArray, 0, byteArray.Length);
// close file stream .
fileStream.Close();
}
return true;
}
catch (Exception exception) {
return false;
}
Я понимаю, что моя обработка исключений не велика! Однако проблема обнаружилась, когда один из сохраняемых объектов имел имя COM2. Это вызвало исключение:
FileStream не будет открывать устройства Win32, такие как разделы диска и ленточные накопители.
Поэтому в моем примере я пытаюсь написать файл с именем COM2.mdl и получить эту ошибку. Я действительно не хочу менять эти имена, так как они встроены разработчиком.
Я рассматривал возможность проверки имен по списку устройств, которые могут вызвать ошибку - но я действительно не знаю, что это за список, а также это будет означать изменение имени файла, которое я не хочу делать.
Итак, мой вопрос: есть ли способ записать байтовый массив в виде двоичного файла, кроме FileStream, который может решить эту проблему?
Большое спасибо
Автор: ScruffyDuck Источник Размещён: 13.11.2019 11:46Ответы (2)
15 плюса
Зарезервированные имена AUX, CLOCK$, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, CON, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, NUL and PRN
.
Вы не сможете создавать файлы с этими именами (и с любым расширением, например, COM2.txt
в Windows в любой файловой системе - это принудительно применяется ядром Windows, для обратной совместимости с CP / M. Это МОЖЕТ быть ограничением для файловых систем FAT, хотя , но это не на NTFS. Смотрите Википедию для получения дополнительной информации.
Однако вы можете попробовать использовать UNC File Names, они должны работать:
echo test > com2.txt
-> The system cannot find the file specified.
echo test > \\mypc\c$\Users\Michael\Desktop\com2.txt
-> works flawlessly
Я не уверен на 100%, работают ли пути UNC с File Stream, но, безусловно, есть способ использовать их в .net.
Автор: Michael Stum Размещён: 21.03.2011 08:110 плюса
Оберните вызов «new FileStream» блоком try / catch, чтобы специально перехватить System.ArgumentException. Если вы поймете это, предположите, что имя файла неверно, и попробуйте еще раз с другим именем файла (например, добавьте «foo» к строке имени файла).
Также вы можете использовать System.IO.Path.GetInvalidPathChars () и System.IO.Path.GetInvalidFileNameChars (); чтобы получить полный список «недопустимых символов», которые не помещаются в имени файла Windows. Таким образом, вы можете удалить или заменить эти символы из строки имени файла, прежде чем пытаться создать файл.
Автор: selbie Размещён: 21.03.2011 07:36Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- c# Как создать новый экземпляр объекта из Типа
- c# Datatable против Dataset
- c# Setting Objects to Null/Nothing after use in .NET
- c# Конвертировать целые числа в записанные числа
- c# Почему я не могу иметь абстрактные статические методы в C #?
- c# Как я могу оценить код C # динамически?
- filestream Как обеспечить, чтобы все данные были физически записаны на диск?
- filestream Как читать и писать файл в C #
- filestream Файлы FILESTREAM остаются после удаленной строки
- filestream Edit a specific Line of a Text File in C#
- filestream Байт-поток и символьный поток
- filestream Запись файла с именем устройства
- filestream создать растровое изображение с файловым потоком
- filestream Сохранить файл значка на жесткий диск
- filestream Доступ к пути запрещен ошибка в C #
- filestream Функция записи не использует значение поиска