一度に多階層のディレクトリを作成する。

 ディレクトリ作成にはCreateDirectory()や_mkdir()を使って作成しますが
これらの関数は一度に1階層しか作成できません。
そこで上の階層から一つずつ作成していくわけですが結構面倒です。
そこで自作の関数を作成します。
 この関数はディレクトリ作成に成功した場合、0以外を返し
作成に失敗した場合は0を返します。


自作の関数。
// 多階層ディレクトリの作成。
// lpPathNameには\で終わるディレクトリ名をわたす。
int MakeDirectory(LPTSTR lpPathName)
{
    char* pdest;
    int res;

    // 不正ディレクトリ名の洗い出し。
    if(lpPathName[1] != ':' || lpPathName[2] != '\\')
        return 0;
    if(strpbrk(lpPathName + 2, _T("/,:;*\"<>|")))
        return 0;
    if(strstr(lpPathName, _T("\\\\")))
        return 0;
    if(strstr(lpPathName, _T(" \\")))
        return 0;

    // lpPathNameから一番最後の\より後ろを削除。(C:\temp\temp → C:\temp)
    pdest = strrchr(lpPathName, '\\');
    if(!pdest)
        return 0;  // \が無い場合は不正ディレクトリ名とみなす。
    pdest[0] = '\0';

    // ディレクトリ作成。
    res = CreateDirectory(lpPathName, NULL);
    if(!res)
    {
        // ディレクトリ作成に失敗した場合
        // 再帰呼び出しをして1つ上の階層を作成します。
        char lpMakePath[MAX_PATH];
        strcpy(lpMakePath, lpPathName);
        MakeDirectory(lpMakePath);
        res = CreateDirectory(lpPathName, NULL);
    }
    return res;
}

[ 戻る ]