删除用户临时目录中的文件夹,但也要考虑unicode foldernames

时间:2016-04-11 20:13:53

标签: c++ windows file winapi unicode

我正在尝试删除用户临时目录%localappdata%/ Temp中的文件夹,以清理一些剩余的空文件夹但是我不知道该怎么做,还需要考虑unicode路径。< / p>

我在用,

double delete_tempfolder(const char* directory_name) {
    rmdir(directory_name);
    return 1;
}

int main(){

    delete_tempfolder("C:\\Users\\USER\\AppData\\Local\\Temp\\TMPDIR");
    cin.get();
    return 0;

}

但是一旦目录使用了非ASCII字符,rmdir就会停止工作,我需要能够使用unicode字符,因为该路径中的用户名文件夹通常都有。

1 个答案:

答案 0 :(得分:-2)

在MultiByteToWideChar()上多读一点,这对我有用,它能够删除非ASCII名称的目录。

double fn_directory_remove(const char* lpath) {

    int wchars_num = MultiByteToWideChar(CP_UTF8 , 0 , lpath, -1, NULL, 0);

    WCHAR* wstr = new WCHAR[wchars_num];

    MultiByteToWideChar(CP_UTF8, 0, lpath, -1, wstr, wchars_num);

    // print directory to delete
    std::wcout << wstr;

    if (RemoveDirectoryW(wstr)) {
        delete[] wstr;
        return 1;
    } else {
        delete[] wstr;
        return 0;
    }

}


// note: should use GetTempPathW() to get actual user Temp directory
double _out = fn_directory_remove("C:\\Users\\USER\\AppData\\Local\\Temp\\TEMPDIR");
cout << "Deleted directory (%localappdata%\\Temp\\TEMPDIR\\): " << _out << endl;