console-Application: Datei laden / speichern / anlegen
-
Hallo,
ich möchte gern innerhalb einer Visual C++ Consolen-Application eine Datei laden und speichern / sowie anlegen können. Welche Headerfiles und Code-Ausdrücke benötige ich dafür?
GJM
-
http://www.willemer.de/informatik/cpp/fileop.htm
Am Besten mit fstream's.
-
way schrieb:
http://www.willemer.de/informatik/cpp/fileop.htm
Am Besten mit fstream's.danke hat mit einem einfachen text schon mal funktioniert.

aber wie kann ich ein Array ausgeben in eine Datei?
unsigned short testFunction(unsigned char *ptr, unsigned short sizearray) { unsigned short i=0; fstream f; f.open("test.txt", ios::out); for(i=0; i<sizearray; i++) f << &ptr[i] << endl; f.close(); }Und wie kann man sagen, dass z.B. jeweils nur 12 Werte vom Array nebeneinander in der Datei stehen sollen? Ist es auch möglich, jeden Dezimalwert vom Array in einen Hex-Wert umzuwandlen und als 0x12 z.B. auszugeben (wobei alle Werte mit einem Komma voneinander getrennt sein müssten)?
GJM
-
hab soweit alles zum Laufen gebracht - allerdings fehlt mir noch das Schlüsselwort, dass bei Hex-Zahlen immer zwei Zahlen dargestellt werden - also auch bei 0x00 (bis jetzt wird hier immer 0x0 angezeigt)
GJM
-
GJM schrieb:
aber wie kann ich ein Array ausgeben in eine Datei?
&ptr[i]Dieser Code gibt dir den Zeiger auf das Objekt i im Array. Nimm den Addressoperator vorne weg, dann geht es. Das sind aber C++ Grundlagen

Zudem, verwende bitte cpp Tags für C++ Code.
GJM schrieb:
Und wie kann man sagen, dass z.B. jeweils nur 12 Werte vom Array nebeneinander in der Datei stehen sollen?
Was meinst du damit? Immer nur 12 Werte in einer Zeile, oder wie?
GJM schrieb:
Ist es auch möglich, jeden Dezimalwert vom Array in einen Hex-Wert umzuwandlen und als 0x12 z.B. auszugeben (wobei alle Werte mit einem Komma voneinander getrennt sein müssten)?
Ja, das geht. Sichwort ist hier "Manipulatoren".
I/O Stream: http://www.cplusplus.com/reference/iostream/
Manipulators: http://www.cplusplus.com/reference/iostream/manipulators/
Hex: http://www.cplusplus.com/reference/iostream/manipulators/hex.html
Showbase (für 0x): http://www.cplusplus.com/reference/iostream/manipulators/showbase.htmlDie Kommatrennung kannst du ja selber einbauen, indem du nach jedem Wert noch ein
", "ausgeben lässt.
Oder du verwendest die C++ Algorithmen und Iteratoren, ein Beispiel findest du hier:
http://www.cplusplus.com/reference/std/iterator/ostream_iterator.htmlFür die Ausgabe als Hexadezimalzahl, musst du dann die Flags im Stream setzen und es nicht mehr über Manipulatoren machen. Hier findest du weitere Infos:
http://www.cplusplus.com/reference/iostream/ios_base/flags.htmlNaja, ok, ich setze noch ein kleines Beispiel nach:
#include <fstream> #include <iterator> #include <algorithm> void output_array(char const* filename, char const* array, std::size_t size) { std::ofstream file(filename); file.setf(std::ofstream::hex); file.setf(std::ofstream::showbase); std::copy(array, array + size, std::ostream_iterator<int>(file, ", ")); // Wir müssen die Zahlen als int ausgeben lassen, // da sonst Buchstaben rauskommen bei char. } int main() { char array[] = { 10, 20, 30, 40, 50 }; output_array("./test.txt", array, sizeof(array) / sizeof(char)); return 0; }(Code ist ungetestet)
Falls du übrigens immer gleiche Weiten haben möchtest bei der Ausgabe, wäre vielleicht noch das hier interessant:
http://www.cplusplus.com/reference/iostream/ios_base/width.htmlIch hoffe dies hilft dir weiter.
Im übrigen empfehle ich auf rohe C-Arrays und Zeiger zu verzichten. Nimm lieber die Container in C++.
Grüssli