首页 > 解决方案 > 在 C# 中,我仅针对特定文件路径获得 System.IO.DirectoryNotFoundException

问题描述

我在 C# 中有以下代码:

FileInfo file = new System.IO.FileInfo(filePathAndName);
file.Directory.Create();
File.WriteAllText(filePathAndName, headers + singleOption.Value);

当文件名是

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])在他们身上使用,找不到任何隐藏的字符。

标签: c#filedirectory

解决方案


您可能不应该使用nul(或conprn)作为文件名,因为这些被 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:\OptnData\DscntOptnData\SnglOptnFls\dirNUL\NUL2008-09-20p32.50.csv
                                      ^^^^^^
                                     This bit

推荐阅读