我在C#中有以下代码:
FileInfo file = new System.IO.FileInfo(filePathAndName);
file.Directory.Create();
File.WriteAllText(filePathAndName, headers + singleOption.Value);
当文件名为时
D:Option DataDiscountOptionDataSingle Option FilesNULNUL2008-09-20p32.50.csv
然后它抛出一个系统。IO.DirectoryNotFoundException。事实上,其中包含NUL
的任何一个都会引发异常。
但是我使用的任何其他文件名,例如
D:Option DataDiscountOptionDataSingle Option FilesNSINSI2006-06-17c50.002006-02-09.csv
不要抛出异常。
文件名的相关部分是从excel文件中读取的。我试过在它们上使用LEN([Cell])
,但找不到任何隐藏字符。
您可能不应该使用nul
(或con
或prn
(作为文件名,因为这些文件名被windows视为特殊设备。如果打开cmd
窗口并输入type nul
:,您可以看到这一点
c:pax> type nul
c:pax> type nulx
The system cannot find the file specified.
事实上,它甚至在使用扩展时行为不端。我曾经有一个源文件const.h
,我将其重命名为con.h
,然后花了一些时间想知道为什么我的代码没有编译。事实证明,因为我使用了#include "con.h"
,Windows很有帮助地打开控制台设备来读取我的头文件。
换句话说,它在等我输入:-(
如果必须有一个存储NUL*.csv
文件的目录层次结构,一种解决方案是使用前缀来确保不会出现特殊的设备名称,例如:
D:OptnDataDscntOptnDataSnglOptnFlsdirNULNUL2008-09-20p32.50.csv
^^^^^^
This bit