2016-04-11 11 views
0

Kullanıcının Temp dizinindeki bir klasörü silmeye çalışıyorum% localappdata%/Temp bazı boş klasörleri temizlemeye çalışıyorum ancak nasıl yapılacağını da bilmiyorum. Unicode yolları dikkate almanız gerekir.Kullanıcı Temp dizinindeki klasörü silin ama aynı zamanda unicode foldernames'i de hesaba katın

ben kullanıyordum

,

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; 

} 

ama en kısa dizin ASCII olmayan karakterler kullanıldığı gibi, rmdir çalışmayı durdurdu, ben mümkün genellikle bu yoldaki adı klasör olarak unicode karakterleri ile çalışmaktan gerekir Onları al.

+0

Hangi derleyiciyi kullanıyorsunuz? Bir 'char' dizisi geniş dizeleri tutamaz. Visual Studio'da [_wrmdir] kullanabilirsiniz (https://msdn.microsoft.com/en-us/library/wt8es881.aspx) –

+0

Ben MinGW g ++ ile -static-libgcc -static-libstdC++ -D UNICODE -D kullanıyorum _UNICODE -O3 -DNDEBUG -s -o "_Test.exe" – user780756

+2

MinGW, '_wrmdir() 'öğesine hala erişebilmelidir. Değilse, MinGW-w64 kullanın. Dize değişmezlerinizi 'L' ('L' C: \\ whatever.txt '') ile önlediğinizden emin olun ve 'char *' yerine 'wchar_t *' kullanın. – andlabs

cevap

-2

MultiByteToWideChar() hakkında biraz daha fazla bilgi edinin, bu benim için çalıştı, ayrıca ASCII olmayan isimlerle de dizinleri kaldırabildi.

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; 
+0

ile güncelleştirilecek Windows UTF-8 kodlu yolları desteklemiyor. "CP_UTF8" yerine "CP_ACP" kullanın. Ya da, sadece 'char *' yi kullanmaya başlamayın, 'wchar_t *' seçeneğini kullanın, daha sonra 'MultiByteToWideChar()' işlevini kullanmanız gerekmez. –

+0

Masif aşırı sıkışma. ANSI'yi kullanmayı bırakın ve yerel kodlamayı kullanın UTF-16 –

+0

Bir DLL dosyasındaki işlevi çağırmam gerektiğini söylemeliydim. Lpath dizesini sadece LPCSTR (LPCSTR veya çift destekli çerçeve nedeniyle) olarak iletebilirim, bu yüzden MultiByteToWideChar() işlevini kullanmam gerekir. – user780756

İlgili konular