【发布时间】:2011-09-07 06:44:25
【问题描述】:
问题
在 Windows C 应用程序中,我想验证传递给函数的参数以确保指定的路径存在。*
如何在 C 中检查 Windows 上是否存在目录?
*我知道在检查是否存在到使用不再存在的路径之间,您可能会陷入竞争状态,但我可以处理。
附加背景
当权限发挥作用时,明确地知道一个目录存在或不存在可能会变得很棘手。在尝试确定目录是否存在时,该进程可能没有访问该目录或父目录的权限。 这可以满足我的需要。如果该目录不存在或者我无法访问它,则在我的应用程序中两者都被视为无效路径故障,因此我不需要区分。如果您的解决方案提供这种区别,则(虚拟)奖励积分。
C 语言、C 运行时库或 Win32 API 中的任何解决方案都可以,但理想情况下,我想坚持使用通常加载的库(例如 kernel32、user32 等)并避免涉及加载非-标准库(如 Shlwapi.dll 中的 PathFileExists)。同样,如果您的解决方案是跨平台的,则(虚拟)奖励积分。
相关
How can we check if a file Exists or not using Win32 program?
【问题讨论】:
-
“我无法访问它”是什么意思?读取权限?写权限?删除文件访问权限?
-
好问题。为此,读取访问权限。我会假设(读取:这可能很愚蠢)检查读取访问就足够了,因为然后尝试在该目录中执行任何文件访问(RWD)将导致该 API 调用(例如 CreateFile、WriteFile)的相应失败。但是,如果您甚至无法访问要读取的目录(因为它不存在或您没有权限),那么在调用文件访问函数时使用它将导致您无法区分路径问题的失败。
-
在 Windows API 中,我认为您也可以使用 FindFirstFile() 来测试是否存在。 msdn.microsoft.com/en-us/library/windows/desktop/…
-
“常用”和“非标准”库并不如上一段所建议的那样相互排斥。