VC 确保你要的路径创建成功

来源:互联网 发布:苹果cms怎么调播放器 编辑:程序博客网 时间:2024/06/05 05:01

在创建本地文件前都要先去检查文件夹路径是否存在,如果不存在则需要去创建它,假设已有路径 D:\work 。

1 保存一个文件到 D:\work\test 路径下

检查路径代码可以这么写:

CString strPathPre = _T("D:\\work\\test")if (!PathIsDirectory(strPathPre)){CreateDirectory(strPathPre, NULL);}

上述可以正常在 work 文件夹下再创建一个 test 文件夹。

2 保存一个文件到 D:\work\test2\sub 路径下

再按照1那样使用 CreateDirectory 则发现没有创建想要的路径,因为 CreateDirectory 只能一级一级目录的创建,要先创建 test2 再创建 sub ,想要一步创建则需要这么写:
#include "imagehlp.h"#pragma comment(lib,"imagehlp.lib")
CString strPathPre = _T("D:\\work\\test2\\sub")if (!PathIsDirectory(strPathPre)){MakeSureDirectoryPathExists((LPCSTR)CStringA(strPathPre));}
上述可以一步创建 D:\work\test2\sub 路径

3 保存到预先不确定的路径下

有时候需要用户自定义文档保存路径,有可能是 D:\work\test,有可能是 D:\work\test2\sub。
就是并不能确定是否创建在已有的文件夹下,还是已有文件夹下的2级,3级甚至更多级目录下,如D:\work\test2\sub\123\fff\222\21212

之前以为一个MakeSureDirectoryPathExists 就可以搞定一切了,然而并不是。

经测试 MakeSureDirectoryPathExists 只是用于创建已有路径下的2级以上目录,像D:\work\test2\sub\123\fff\222\21212 这样,如果创建 D:\work 下的1级目录 D:\work\test 发现其并不能创建成功。仍需要 CreateDirectory 来创建,所以综上,为稳妥起见只有这样写了:

//CString strPathPre = _T("D:\\work\\test2\\sub")//strPathPre 由程序动态获取if (!PathIsDirectory(strPathPre)){CreateDirectory(strPathPre, NULL);MakeSureDirectoryPathExists((LPCSTR)CStringA(strPathPre));}
经测试这样可以保证一定能创建成功了。






0 0