我使用的是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();
小點:'MAX_PATH'可能是用於該路徑的最大長度是更好的選擇。就問題而言,它是如何將一行寫入輸出流的?這種情況的發生方式與「hello world」程序相同:'cout <<「Hello world \ n」'。 – roeland
@ roeland更多的是如何用白色空格來閱讀它(直到最後一個字符),因爲如果在目錄的末尾添加額外的空格,你可能會猜測會有多少失敗。 –
'std :: getline'讀取一行。主要問題是將流設置爲使用UTF-8作爲外部數據。你需要使用一些Visual C++庫擴展,比如'_setmode' IIRC(它們也被MingW g ++支持)。 –