Edit: Har löst problemet nu. Jag är inte säker på hur, alls, men jag skrev om båda funktionerna och ändrade lite övrigt krafs... Kan tyvärr inte hjälpa till mycket om nån annan för samma problem.
Jo, det är såhär, att jag har en editbox i ett vanligt fönster, som jag försöker ge öppna och spara-funktioner.
Om vi börjar med öppna, så läser jag in data från en fil och sätter det till editboxen med SetDlgItemText alt. WM_SETTEXT.
Problemet är det, att det blir inga radbrytningar, utan istället två fyrkanter det där står \r\n i filen.
På motsatta sidan, när man sparar, blir det \r\r\n där det är radbrytningar, och därför ser filerna felaktiga ut i andra program...
Filer som är sparade i mitt program ser rätt ut i i mitt program.
Lite kod...
Editboxen:
HWND hEdit = CreateWindowEx(NULL, "EDIT", "",
WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_VSCROLL | WS_HSCROLL | ES_WANTRETURN,
0, 0, 120, 120, hwnd, (HMENU)110, GetModuleHandle(NULL), NULL);
Ladda:
case IDC_LOAD:
{
OPENFILENAME ofn;
memset(&ofn, 0, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0Web Files (*.php, *.asp, *.htm[l])\0*.php;*.asp;*.htm;*.html\0All Files (*.*)\0*.*\0\0";
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
ofn.nMaxFile = MAX_PATH;
char *tmp = new char[MAX_PATH+1];
memset(tmp, 0, MAX_PATH+1);
ofn.lpstrFile = tmp;
if (GetOpenFileName(&ofn))
{
string sFileData;
FILE *file = fopen(tmp, "r");
char *temp = new char [1024];
memset(temp, 0, 1024);
if (file)
{
while (!feof(file))
{
fread(temp, sizeof(char), 1024, file);
sFileData += temp;
}
delete [] temp;
fclose(file);
SetDlgItemText(hwnd, 110, sFileData.c_str());
}
}
} // end IDC_LOAD
break;
Klaga inte på ful kod tack, ska snygga till "lite" när jag förstått vad fan som är fel här.
Nån som har nån lösning, som åtminstone helst inte innebär att köra replace på allt hela tiden?
Edit: Snyggade till tabbarna en aning.
Edit: Nu hajar jag ännu mindre! Om man kollar igenom strängen innan man sparar så stämmer den (bara en av varje, \r\n).
Jag provade att loopa igenom hela tecken för tecken. Före varje '\n' finns en '\r', men före de två så står det INTE någon '\r', utan bokstaven/tecknet som SKA vara där. Ändå blir det fel när jag sparar med fwrite().
Ändrar fwrite() texten på något vis eller?
Edit igen: Det blir samma fel om jag sparar med en simpel ofstream. Inte oväntat, men jag förstår fortfarande inte hur en string som är helt korrekt på raden ovan kan bli felaktig såhär?