我正在开发一个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
答案 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。