【问题标题】:Creating new folders if they don't exist for fopen如果 fopen 不存在新文件夹,则创建新文件夹
【发布时间】:2011-02-19 13:19:27
【问题描述】:

我有一个 C++ 程序,它接受用户输入 fopen 以启动文件写入。有人可以帮我找到一个函数,该函数将返回 FILE* 并使用 Windows 特定版本的 mkdir 以便为 fopen 创建文件夹结构,以便永远不会在指定位置打开新文件,因为其中一个文件夹不存在。非常感谢!

【问题讨论】:

    标签: c++ windows fopen mkdir


    【解决方案1】:

    Windows API 中有一个方法 MakeSureDirectoryPathExists,在 dbghelp.h 中声明。它递归地创建目录,所以我想这就是你所追求的。 但是,如果您对某个目录具有写访问权限,则无法确保此“永不失败”,因为它还取决于特权等。

    编辑:这是一些虚拟示例代码;但是它使用 GetProcAddress,因为我在编写它时找不到 dbghelp 标头。

    typedef BOOL (WINAPI * CreateDirFun ) ( __in PCSTR DirPath );
    
    HMODULE h = LoadLibrary( "dbghelp.dll" );
    CreateDirFun pFun = (CreateDirFun) GetProcAddress( h, "MakeSureDirectoryPathExists" );
    (*m_pFun)( psPath ) )
    CreateDirectory( psPath );
    FreeLibrary( h );
    

    【讨论】:

    • 嗯,这正是我想要的。再次感谢!
    • 我认为使用 SHCreateDirectoryEX 会更有意义。
    • MSDN 明确声明 SHCreateDirectoryEx:“此功能可通过 Windows XP Service Pack 2 (SP2) 和 Windows Server 2003 获得。它可能在 Windows 的后续版本中被更改或不可用。”因此,如果该程序将分发给许多用户,那么它不是一个好的选择。如果此功能是仅供作者本人使用的小型实用程序的一部分,则可能是一个不错的选择。
    猜你喜欢
    • 2011-01-19
    • 2018-02-10
    • 2013-09-18
    • 2014-09-07
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多