Natknąłem się na coś ciekawego. Mam dekompilator, który wyodrębnia informacje z pliku binarnego. Wyodrębniam serię obiektów, które muszę zapisać osobno na dysku jako pliki binarne. Te obiekty to modele graficzne skompilowane do biblioteki. Obiekty mają osadzone w nich nazwy i muszę użyć tej nazwy jako nazwy pliku.Zapisywanie pliku z nazwą urządzenia
Używam:
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;
}
Zdaję sobie sprawę, mój obsługa wyjątków nie jest wielki! Jednak problem pojawił się, gdy jeden z obiektów do zapisania miał nazwę COM2. Wywołał to wyjątek:
FileStream nie otworzy urządzeń Win32, takich jak partycje dysków i napędy taśm.
Tak więc w moim przykładzie próbuję napisać plik o nazwie COM2.mdl i uzyskać ten błąd. Naprawdę nie chcę zmieniać tych nazw, ponieważ są one osadzone przez programistę.
Rozważałem przetestowanie nazw na liście urządzeń, które mogą powodować błąd - ale tak naprawdę nie wiem, co to może być lista, a także oznaczałoby to zmianę nazwy pliku, którego nie chcę zrobić.
Moje pytanie: czy istnieje sposób na zapisanie tablicy bajtów jako pliku binarnego innego niż plik FileStream, który może zostać usunięty z tego problemu?
Dziękujemy
Próbowałem dodać \\? \ Na początku nazwy pliku dla FileStream i zwróciłem Nielegalny znak w wyjątku ścieżki, więc domyślam się, że ścieżki UNC i FileStream nie mieszają się – ScruffyDuck
Dzięki za listę zarezerwowanych słów. W końcu zdecydowałem się przetestować na tej liście i jeśli jest tam nazwa, aby zmienić nazwę, dodając sufiks. To działa wystarczająco dobrze dla mojego celu od teraz. – ScruffyDuck
+1 Świetne informacje. Nie mogłem się domyślić, dlaczego nie mogłem stworzyć pliku o nazwie con.txt. –