我遇到了好奇的事.我有一个反编译器从二进制文件中提取信息.我正在提取一系列对象,我需要将它们作为二进制文件单独写入磁盘.这些对象是编译到库中的图形模型.对象中嵌入了名称,我需要使用该名称作为文件名.
我在用 :
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;
}
Run Code Online (Sandbox Code Playgroud)
我意识到我的异常处理并不好!但是,当其中一个要保存的对象名为COM2时,问题就出现了.这导致异常:
FileStream不会打开Win32设备,如磁盘分区和磁带驱动器.
所以在我的例子中,我试图编写一个名为COM2.mdl的文件并得到此错误.我真的不想更改这些名称,因为它们是由开发人员嵌入的.
我考虑根据可能导致错误的设备列表测试名称 - 但我真的不知道该列表可能是什么,也意味着更改我不想做的文件的名称.
所以我的问题是:有没有办法将字节数组写为二进制文件而不是FileStream可能会解决这个问题?
非常感谢
Mic*_*tum 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上.有关更多信息,请参阅Wikipedia.
但是,您可以尝试使用UNC文件名,这些应该起作用:
echo test > com2.txt
-> The system cannot find the file specified.
echo test > \\mypc\c$\Users\Michael\Desktop\com2.txt
-> works flawlessly
Run Code Online (Sandbox Code Playgroud)
我不是100%确定UNC路径是否与文件流一起使用,但肯定有一种方法可以在.net中使用它们.