2012-06-09 78 views
0

我有以下代碼可以正常工作,直到DskPrt1.txt中的最後一行assign letter=。該文件被寫入,因爲它應該。在下拉列表中,我選擇一個驅動器號,將選定的字母發送到FILE fp,寫出來,然後直接用diskpart讀取它。這是輸出從文件讀取的diskpart錯誤

第1卷是所選體積

對於該命令指定的參數是無效的。

這告訴我它正在做所有事情,直到DskPrt.txt的第二行。我已經將assign letter=X複製並手動粘貼到了diskpart中,並且運行得很好。爲什麼它不適用於我的代碼?

第1部分

SendMessage( 
(HWND) hWndDropMenu, // handle to destination window 
CB_GETLBTEXT,   // message to send 
(WPARAM) wParam,  // not used; must be zero 
(LPARAM)tmpMsg   // not used; must be zero 
); 

第2部分

FILE *fp; 
fp = fopen("DskPrt1.txt", "wt"); 
char DskPrt11[] = "select volume 1"; 
char DskPrt12[] = "assign letter="; 
fwrite (DskPrt11 , 1 , sizeof(DskPrt11) , fp);   //Line 1 
fwrite("\n", sizeof(char), 1, fp);      //New line 
fwrite (DskPrt12 , 1 , sizeof(DskPrt12) , fp);   //Line 2 
fwrite (tmpMsg , 1 , sizeof(tmpMsg) , fp);    //Letter 
fclose(fp); 

//Execute part 1 commands 
std::wstring arrString[3] = {L"/C mkdir C:\\Users\\Andrew\\Desktop\\test",L"/C DISKPART /s C:\\Users\\Andrew\\Desktop\\DskPrt1.txt"}; 
LPWSTR cmd =L"C:\\Windows\\System32\\cmd.exe"; 
for(int i=0; i<2; i++) 
{ 
    STARTUPINFO info={sizeof(info)}; 
    PROCESS_INFORMATION processInfo; 
    CreateProcessW(cmd, &arrString[i][0], NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &info, &processInfo); 
    ::WaitForSingleObject(processInfo.hProcess, INFINITE); 
    CloseHandle(processInfo.hProcess); 
    CloseHandle(processInfo.hThread); 
} 

回答

1

正因爲如此:

fwrite (DskPrt11 , 1 , sizeof(DskPrt11) , fp); 

使用的sizeof()的時候,包括終止空。所以你的文件最後至少有兩個你不想要的空字節。改用strlen()。

+0

這個工作只有現在它不寫入選定的字符。如果我選擇「G」,它將「A」寫入文件。如果我選擇「N」,則分配「B」。 – arynhard

+0

這是因爲您的SendMessage調用錯誤。在你的評論中你說wParam必須是零,但這不是事實。 wParam必須是要檢索的列表框項目的索引。 http://msdn.microsoft.com/en-us/library/windows/desktop/bb775862%28v=vs.85%29.aspx –