2015-10-15 47 views
0

我使用的是Windows 10(的Visual Studio 2015年)。函數getline與WINAPI - 使用WOFSTREAM/WIFSTREAM - C++/WIN32

好吧我只是想說,我正在使用編輯框來爲用戶編寫一個目錄,appname,comboboxname,然後讓wofstream將目錄,appname,comboboxname輸出到.txt文件中。

我的問題是,一些目錄有空間,所以當wifstream讀取這些空間然後切斷目錄早期和存儲切斷版到wchar_t的變量之一。

我需要對程序做(我不知道如果可能的話)什麼是線路輸出線。

實施例:

C:\Program Files (x86)\Minecraft

MinecraftLauncher

Minecraft

然後使用函數getline讀取整個行,包括空格,商店行成一個變量,然後獲得下一行。 (但它也不能搶任何多餘的空格不在該目錄,否則將無法正常工作),你們可能知道如何目錄工作笑)

所以你們不必看那麼難,我希望這發生在IDB_CLICK_ME的情況下。

這是目前我的代碼,什麼我用之前,我決定將它添加到我的主要應用程序修補:

這是我試圖讀取該文件(無空格)

case WM_CREATE: 
    { 


     wchar_t testData[20] = L"Hai"; 
     CreateWindow(L"button", L"CLICK ME", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 5, 5, 200, 25, hwnd, (HMENU)IDB_CLICK_ME, NULL, NULL); 
     comboBox = CreateWindow(L"combobox", L" ", WS_VISIBLE | WS_CHILD | CBS_DROPDOWNLIST, 5, 50, 100, 100, hwnd, (HMENU)4, NULL, NULL); 
     hProgramName = CreateWindow(L"edit", L"Program Name", WS_VISIBLE | WS_CHILD | WS_BORDER | ES_AUTOHSCROLL, 5, 100, 200, 25, hwnd, NULL, NULL, NULL); 
     hProgramDirectory = CreateWindow(L"edit", L"Program Directory", WS_VISIBLE | WS_CHILD | WS_BORDER | ES_AUTOHSCROLL, 5, 130, 200, 25, hwnd, NULL, NULL, NULL); 
     hProgramNameComboBox = CreateWindow(L"edit", L"Name listed in ComboBox", WS_VISIBLE | WS_CHILD | WS_BORDER | ES_AUTOHSCROLL, 5, 160, 200, 25, hwnd, NULL, NULL, NULL); 
     std::wifstream myfile; 
     myfile.open("LaunchLocations.txt"); 
     myfile >> std::noskipws >> gameLaunchtest.directory; 
     myfile >> std::noskipws >> gameLaunchtest.AppName; 
     myfile >> std::noskipws >> gameLaunchtest.ComboBoxName; 

這是我寫的,到目前爲止,這工作正常

ComboBox_AddString(comboBox, gameLaunchtest.directory); 
    break; 


     case WM_COMMAND: 
      switch (LOWORD(wparam)) 
      { 
      case IDB_CLICK_ME: 
        GetWindowText(hProgramDirectory, gameLaunchtest.directory, MAX_PATH); 
      GetWindowText(hProgramName, gameLaunchtest.AppName, MAX_PATH); 
      GetWindowText(hProgramNameComboBox, gameLaunchtest.ComboBoxName, MAX_PATH); 
      wofstream launchLocations; 
      launchLocations.open("LaunchLocations.txt"); 
      launchLocations << gameLaunchtest.directory << endl; 
      launchLocations << gameLaunchtest.AppName << endl; 
      launchLocations << gameLaunchtest.ComboBoxName << endl; 
      launchLocations.close(); 
+0

小點:'MAX_PATH'可能是用於該路徑的最大長度是更好的選擇。就問題而言,它是如何將一行寫入輸出流的?這種情況的發生方式與「hello world」程序相同:'cout <<「Hello world \ n」'。 – roeland

+0

@ roeland更多的是如何用白色空格來閱讀它(直到最後一個字符),因爲如果在目錄的末尾添加額外的空格,你可能會猜測會有多少失敗。 –

+0

'std :: getline'讀取一行。主要問題是將流設置爲使用UTF-8作爲外部數據。你需要使用一些Visual C++庫擴展,比如'_setmode' IIRC(它們也被MingW g ++支持)。 –

回答

0

這樣的方式我固定我的問題(我用的是我必須使用wifstream函數getline不是字符串函數getline的一些非常幫手成員告訴)

std::wifstream myfile; 
    while (myfile.getline(test[number].directory, 100)) 
     { 
      myfile.getline(test[number].AppName, 100); 
      myfile.getline(test[number].ComboBoxName, 100); 
      test[number].ID; 
      ComboBox_AddString(comboBox, test[number].ComboBoxName); 
      number++; 
      test[number].ID = test[number].ID + 1;