在C#中,我仅针对特定文件路径获得System.IO.DirectoryNotFoundException
我在C#中有以下代码: 当文件名为在C#中,我仅针对特定文件路径获得System.IO.DirectoryNotFoundException,c#,file,directory,C#,File,Directory,我在C#中有以下代码: 当文件名为 D:\Option Data\DiscountOptionData\Single Option Files\NUL\NUL2008-09-20p32.50.csv 然后抛出System.IO.DirectoryNotFoundException。事实上,任何包含NUL的代码都会抛出异常 但是我使用的任何其他文件名,例如 D:\Option Data\DiscountOptionData\Single Option Files\NSI\NSI2006-06-17
D:\Option Data\DiscountOptionData\Single Option Files\NUL\NUL2008-09-20p32.50.csv
然后抛出System.IO.DirectoryNotFoundException。事实上,任何包含NUL
的代码都会抛出异常
但是我使用的任何其他文件名,例如
D:\Option Data\DiscountOptionData\Single Option Files\NSI\NSI2006-06-17c50.002006-02-09.csv
不要抛出异常
文件名的相关部分从excel文件中读取。我尝试在它们上使用
LEN([Cell])
,但找不到任何隐藏字符。您可能不应该使用nul
(或con
或prn
)作为文件名,因为windows认为它们是特殊设备。如果打开cmd
窗口并输入typenul
,您可以看到这一点:
c:\pax>type nul
c:\pax>类型nulx
系统找不到指定的文件。
事实上,它甚至在扩展时表现不好。我曾经有一个源文件
const.h
,我把它重命名为con.h
,然后花了一些时间想知道为什么我的代码没有编译。事实证明,因为我使用了#include“con.h”
,Windows已经
帮助打开控制台设备以读取我的头文件
换句话说,它在等待我输入:-)
如果必须具有存储
NUL*.csv
文件的目录层次结构,一种解决方案是使用前缀以确保不会出现特殊的设备名称,例如:
D:\optdata\dscntoptdata\SnglOptnFls\dirNUL\NUL2008-09-20p32.50.csv
^^^^^^
这一点
NUL
不是文件或目录的有效名称-请参阅在系统上尝试创建名为NUL
的文件夹。这行不通。您可以检查路径是否包含\NUL\并将其重命名为更合适的名称,如-NUL-
或类似名称。啊,这很有意义,谢谢,我必须重新考虑如何组织事情。我怀疑NUL可能意味着什么,但在C中找不到任何内容。那么有解决办法吗?NUL是股票的名称,另一部分是期权代码,所以我想保持不变。但是我想我可以用NUX或其他东西来替换它,但是解决方法需要包含在我使用文件的任何地方。@YesThisme,请参见答案的底部。您可以将代码保留为NUL
,只需确保不会在目录组件中单独使用它。通过添加一个常量前缀(如dir
)可以很容易地修复这个问题。现在只要决定是否扔掉并替换我的计算机在过去几天中写入的数百万个文件,这几乎阻止了我对它做任何其他事情:)但我有一些128Gb的USB的邮件来帮助它加速无论如何,所以最好从头开始。
FileInfo file = new System.IO.FileInfo(filePathAndName);
file.Directory.Create();
File.WriteAllText(filePathAndName, headers + singleOption.Value);