当目录不存在时,Directory.Exists返回true

时间:2009-11-12 17:14:06

标签: c# .net windows-7

我正在开发一个Windows 7应用程序,并运行一些例程目录创建代码:

string dirPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "MyDir");    
if (!Directory.Exists(dirPath))
   Directory.CreateDirectory(dirPath);

问题是,当我无法通过命令行和Windows资源管理器查看目录时,Directory.Exists行返回true。使用Windows XP时,这不是问题。 Windows 7是否有一些我不知道的事情?

编辑:添加了Path.Combine

3 个答案:

答案 0 :(得分:11)

请理解Windows Vista和Windows 7使用虚拟化来保护此类文件夹,因此您需要检查myDir是否在虚拟存储中,

C:\ Users(用户名)\ AppData \ Local \ VirtualStore \ ProgramData

答案 1 :(得分:0)

我不知道为什么Windows 7会这样做,而且我没有要测试的副本,但是对于Directory.Exists(路径)的检查不是必需的。如果您(深入)反映到Directory.CreateDirectory(路径),您会发现它在内部检查以查看该目录是否已存在,并且在已存在的目录上多次调用它并不是一个问题。对Directory.Exists(路径)的调用是无关紧要的,也是不必要的。

当然,如果Windows 7没有按照我期望的方式执行Directory.Exists,也许它不会执行裸Directory.CreateDirectory。无论如何,它值得测试。

答案 2 :(得分:0)

CommonApplicationData通常在Windows 7上解析为<OSDrive>\ProgramData。这是一个隐藏文件夹。如果您不要求资源管理器显示隐藏的文件和文件夹(来自文件夹选项 - >视图 UI),您将无法在资源管理器中看到它。

编辑:确保您在资源管理器中查看了正确的目录:浏览到%PROGRAMDATA%,而不是C:\ ProgramData。