从文件中读取diskpart错误

时间:2012-06-09 21:16:27

标签: c++ c winapi

我有以下代码可以正常使用DskPrt1.txt assign letter=中的最后一行。文件按原样写入。在下拉列表中,我选择一个驱动器号,将所选字母发送到FILE fp,写出来,然后指示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 个答案:

答案 0 :(得分:1)

因此:

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

通过使用sizeof(),您将包含终止null。因此,您的文件最终至少有两个您不想要的空字节。请改用strlen()。