2014-05-13 2 views
-2

je CodeWinAPI WriteFile

HANDLE file; 

    file = CreateFile(L"D:\\SystemWin\\a.txt", 
    GENERIC_READ | GENERIC_WRITE, 
    0, 
    NULL, 
    CREATE_ALWAYS, 
    FILE_ATTRIBUTE_NORMAL, 
    0); 

    if(file == INVALID_HANDLE_VALUE){ 
     wprintf(L"Invalid file handle\n"); 
     return 1; 
    } 

    wcsncpy(aBuffer, L"1234567890\0", BUF_SIZE); 
    WriteFile(file, aBuffer, wcslen(aBuffer), &writtenByte, NULL); 

Si je me trompe pas dans mon dossier que j'ai shoud texte « 1234567890 » mais je dois à la place 12 345. Quel est le problème? BUF_SIZE est 11

Répondre

5
wcslen

retourne le nombre d'éléments dans wchar_taBuffer avant une terminaison nulle (dans le cas, cela est 10). Mais WriteFile veut le nombre de BYTES. Vous devez faire ceci:

WriteFile(file, aBuffer, wcslen(aBuffer) * sizeof(wchar_t), &writtenByte, NULL); 

Notez également que les chaînes littérales sont nuls-fin automatiquement en C. Donc, votre chaîne littérale L"1234567890\0" est en fait de 12 caractères (« 1234567890 \ 0 \ 0 »). Réécrivez-le comme L"1234567890" à la place.

+0

Parfait! Tu es brillant! Merci! – user3603343