Dateien mit fstream kopieren
-
Das ios::binary hats auch nicht getan.
-
Das wäre der ganze Code(Ich habe in mit WinApi gemacht):
// GT_HelloWorldWin32.cpp // compile with: /D_UNICODE /DUNICODE /DWIN32 /D_WINDOWS /c #include <windows.h> #include <stdlib.h> #include <string.h> #include <tchar.h> #include <fstream> // Global variables HWND hwndLabel, hwndLabel2, hwndLabel3; LPSTR TEXTo[256], TEXTo2[256]; #define ID_BNLAU 600 #define ID_BNLAU2 601 // The main window class name. static TCHAR szWindowClass[] = _T("win32app"); // The string that appears in the application's title bar. static TCHAR szTitle[] = _T("Win32 Guided Tour Application"); HINSTANCE hInst; // Forward declarations of functions included in this code module: LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); if (!RegisterClassEx(&wcex)) { MessageBox(NULL, _T("Call to RegisterClassEx failed!"), _T("Win32 Guided Tour"), NULL); return 1; } hInst = hInstance; // Store instance handle in our global variable // The parameters to CreateWindow explained: // szWindowClass: the name of the application // szTitle: the text that appears in the title bar // WS_OVERLAPPEDWINDOW: the type of window to create // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y) // 500, 100: initial size (width, length) // NULL: the parent of this window // NULL: this application does not have a menu bar // hInstance: the first parameter from WinMain // NULL: not used in this application HWND hWnd = CreateWindow( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 500, 300, NULL, NULL, hInstance, NULL ); if (!hWnd) { MessageBox(NULL, _T("Call to CreateWindow failed!"), _T("Win32 Guided Tour"), NULL); return 1; } hwndLabel = CreateWindow("EDIT", "Wie heißt die Datei?", WS_VISIBLE | WS_CHILD | WS_BORDER, 0,5, 300,20, hWnd, NULL, hInstance, NULL); hwndLabel2 = CreateWindow("Edit", "Wohin soll sie kopiert werden", WS_VISIBLE | WS_CHILD | WS_BORDER, 0,40, 300,20, hWnd, NULL, hInstance, NULL); hwndLabel3 = CreateWindow("Button", "Kopieren", WS_VISIBLE | WS_CHILD | WS_BORDER, 30,200, 100,20, hWnd, (HMENU)ID_BNLAU, hInstance, NULL); // The parameters to ShowWindow explained: // hWnd: the value returned from CreateWindow // nCmdShow: the fourth parameter from WinMain ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // Main message loop: MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam; } // // FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) // // PURPOSE: Processes messages for the main window. // // WM_PAINT - Paint the main window // WM_DESTROY - post a quit message and return // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { if(LOWORD(wParam) == ID_BNLAU) { GetWindowText(hwndLabel, (LPSTR)TEXTo, 256); GetWindowText(hwndLabel2, (LPSTR)TEXTo2, 256); std::fstream file((LPSTR)TEXTo, std::ios::in, std::ios::binary); std::fstream funf((LPSTR)TEXTo2, std::ios::out, std::ios::binary); char h; while(file.get(h)) { funf.put(h); } funf.close(); file.close(); } PAINTSTRUCT ps; HDC hdc; TCHAR greeting[] = _T(""); switch (message) { case ID_BNLAU: { break; } case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // Here your application is laid out. // For this introduction, we just print out "Hello, World!" // in the top left corner. TextOut(hdc, 5, 5, greeting, _tcslen(greeting)); // End application-specific layout section. EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); break; } return 0; }
-
volkard schrieb:
Vielleicht hilft ios::binary.
Um Volkards Tipp zu erklären: Es gibt system-spezifische Konvertierungen, die automatisch an den Zeichen vorgenommen werden, die du aus einer Datei liest (zum Beispiel bei CRLF und LF). Mit
ios_base::binarywerden diese Konvertierungen unterdrückt, und du liest die Datei Byte für Byte genauso wie es auch in ihr steht.
-
SeppJ schrieb:
Du solltest eine Executable mit binary öffnen, wenn sie nach dem Kopieren noch funktionieren soll, aber das erklärt den Fehler nicht.
Naja, vielleicht doch, das ASCII-Zeichen EOF (26, ^Z) könnte im Textmodus dazu führen, daß der Stream sich als beendet fühlt. Uih, ist das lange her, daß ich Binardateien im Textmodus gelesen hatte, darum weiß ich die Details nicht mehr auswendig. Naja, es wäre eine einfache Erkklärung, sicherlich den Test wert.
-
ICH HABS ja jetzt mit Binary gemacht es funktioniert immer noch nicht!!!!
-
Der Typ mit vielen Fragen schrieb:
Das wäre der ganze Code(Ich habe in mit WinApi gemacht):
Das ist eben genau das, was man nicht unter einem Minimalbeispiel vorstellt.

Was interessieren hier 200 Zeilen Codebloat, mit denen du irgendwelche Fenster öffnest? Mach daraus ein vollständiges Programm von 10-20 Zeilen, das eine bestimmte Datei kopiert oder meinetwegen vorher auf der Konsole nach dem Dateinamen fragt. Wenn beim Erstellen dieses Beispiels der Fehler schon von alleine verschwindet, dann weißt du schon, dass er höchstwahrscheinlich woanders liegt. Wenn er noch da ist, können wir den Fehler leicht nachvollziehen und dir helfen.
Du willst hier Hilfe. da ist Eigeninitiative angesagt und nicht einfach nur ein unmotiviertes Kopieren des ganzen Codes.
-
std::fstream file((LPSTR)TEXTo, std::ios::in, std::ios::binary);
Ähm, liest sich das nicht eher
std::fstream file((LPSTR)TEXTo, std::ios::in | std::ios::binary);
?
Was macht nochmal der dritte Parameter?
-
volkard schrieb:
Was macht nochmal der dritte Parameter?
Es gibt keinen, Schatz.
Außerdem möchte er wahrscheinlich nicht
fstream, sondernif/ofstream.
-
Arcoth schrieb:
volkard schrieb:
Was macht nochmal der dritte Parameter?
Es gibt keinen, Schatz.
Gibt es tatsächlich nicht. Dann kann das ohne weitere Klammern aber nicht compiliert haben.

-
SeppJ schrieb:
oder meinetwegen vorher auf der Konsole nach dem Dateinamen fragt.
Ja, bitte immer (möglichst kleine) Konsole-Anwendungen posten, die kann ich dann auch unter Linux testen und rumfummeln. Will ja immer gerne helfen, aber für kleine Fragen nach Windows umbooten, das mag ich dann doch nur selten.
-
Arcoth schrieb:
volkard schrieb:
Was macht nochmal der dritte Parameter?
Es gibt keinen, Schatz.
Das ist fatal.
Wenn sein Compiler das durchgelassen hat, dann stinkt was.Ich würde drauf tippen, daß er mal auf "Oh, ein Fehler, willste lieber die alte Version ausführen?" mal "Janu, mach mal, ist ja egal." geklickt hat und das tödliche Häkchen "Frag mich nicht wieder sowas!" dabei an war.
Kann man retten, wenn man ein wenig rumsucht, aber bei kleinem Projekten schneller isses, ein neues Projekt anzulegen und den Quellcode reinzukopieren.MSVC fragt wirklich danach und tut dann wirklich jedesmal ohne weitere Nachfrage die alte Version benutzen. Kein Witz. Großes Ärgernis.
-
Arcoth schrieb:
volkard schrieb:
Was macht nochmal der dritte Parameter?
Es gibt keinen, Schatz.
http://msdn.microsoft.com/en-us/library/8et8s826.aspx
:p
-
Ich würde drauf tippen, daß er mal auf "Oh, ein Fehler, willste lieber die alte Version ausführen?" mal "Janu, mach mal, ist ja egal." geklickt hat und das tödliche Häkchen "Frag mich nicht wieder sowas!" dabei an war.
Sowas gibt es nicht. Wer kommt auf die Idee, ein "Frag mich nicht nochmal"-Häkchen bei sowas hinzuzufügen?
Sekunde, ich habe deinen Post nicht zu Ende gelesen!
MSVC fragt wirklich danach und tut dann wirklich jedesmal ohne weitere Nachfrage die alte Version benutzen. Kein Witz. Großes Ärgernis.
Das ist ja der Wahnsinn! (Perfekte Gelegenheit um VC++ in Misskredit zu bringen.. hihi)Übrigens, wo war noch mal dein Post, wo du davon erzählt hast, dass dich Tunten besser frisieren? Kann ihn nicht finden.
-
Arcoth schrieb:
Übrigens, wo war noch mal dein Post, wo du davon erzählt hast, dass dich Tunten besser frisieren? Kann ihn nicht finden.
-
volkard schrieb:
std::fstream file((LPSTR)TEXTo, std::ios::in, std::ios::binary);
Ähm, liest sich das nicht eher
std::fstream file((LPSTR)TEXTo, std::ios::in | std::ios::binary);
?
Was macht nochmal der dritte Parameter?DANKE vielmals es hat geklappt,
indem ich das "," zu einem "|" gemacht habe.