Temp Datei erstellen
-
Hallo Leute,
wollte einmal euren Rat einholen, wie ich ganz easy eine Temp Datei mit einer bestimmten Größe erstellen kann.
Das einfachste war für mich eine Datei zu öffnen und mit einer for-Schleife die gewünschte Menge an 0 bytes rein zu schreiben.
An sich ist es ja einfach, aber ist echt unschön zich tausende male die schleife durchlaufen zu lassen. Daher wollte ich fragen ob es schon etwas fertiges gibt, dass dieses übernimmt.
-
Le Fox schrieb:
[...] eine Temp Datei mit einer bestimmten Größe erstellen [...]
Wozu soll das gut sein?
-
Le Fox schrieb:
Hallo Leute,
wollte einmal euren Rat einholen, wie ich ganz easy eine Temp Datei mit einer bestimmten Größe erstellen kann.
Das einfachste war für mich eine Datei zu öffnen und mit einer for-Schleife die gewünschte Menge an 0 bytes rein zu schreiben.
An sich ist es ja einfach, aber ist echt unschön zich tausende male die schleife durchlaufen zu lassen. Daher wollte ich fragen ob es schon etwas fertiges gibt, dass dieses übernimmt.std::ostream stream("MeineDatei"); stream << std::string(5000, '\0');Dadurch erübrigt sich aber nicht Schwertfisch's Frage.
-
Zum beispiel bei einem Filetransfer. Wenn die Parts von der Datei nicht in der richtigen Reihenfolge sind, dann schreibe ich den gerade erhaltenen Teil an die stelle wo er hingehört und nicht einfach an die nächste stelle. Kann zwar alles natürlich im im Ram auslagern, möchte ich aber nicht - wehe es kommen mal große Daten.
-
Le Fox schrieb:
Zum beispiel bei einem Filetransfer. Wenn die Parts von der Datei nicht in der richtigen Reihenfolge sind, dann schreibe ich den gerade erhaltenen Teil an die stelle wo er hingehört und nicht einfach an die nächste stelle. Kann zwar alles natürlich im im Ram auslagern, möchte ich aber nicht - wehe es kommen mal große Daten.
??? Wovon redest du?
-
Le Fox schrieb:
Zum beispiel bei einem Filetransfer. Wenn die Parts von der Datei nicht in der richtigen Reihenfolge sind, dann schreibe ich den gerade erhaltenen Teil an die stelle wo er hingehört und nicht einfach an die nächste stelle.
Dann mach das doch einfach direkt. Dafür musst du die Datei nicht vorher unnötig aufblasen. In C geht das mit der Funktion fseek(), in C++ mit seekg von fstream.
Also konkret sieht das so aus: Du öffnest eine leere Datei und wenn du dann einen Datenblock an die Stelle x schreiben willst, springst du mit fseek oder seekg einfach direkt an die Stelle x und fängst an zu schreiben. Das ist alles. Du musst die Datei nicht vorher mit 0en füllen oder sowas.
-
Ich will eine Datei von verschiedenen Quellen empfangen -
z.B. splitte ich diese dazu in 3 Teile auf. Die Quelle vom 3te Teil war die Schnellste und der 3te Part ist dann zu erst da, dann kann ich den Part so gesagt direkt in die Datei schreiben ohne diesen im Speicher zu halten.
Also das gleiche Prinzip wie bei p2p Netzwerken, wenn man dort eine Datei überträgt.
Ist etwas schwer zu erklären, hoffe ihr habt es dennoch verstanden.
-
Er will möglicherweise ein Programm schreiben, das große Dateien empfängt. Die Reihenfolge der ankommenden Daten ist dabei zufällig. Deshalb möchte er direkt den Speicherplatz auf der Festplatte reservieren, um dann die empfangenen Daten gleich an die richtige Stelle der Datei schreiben zu können.
Edit: Ich war etwas zu spät, meine Vermutung stimmte aber^^
-
Problematisch wird es doch, wenn ich während des Schreibens erst merke, dass ich nicht genug Platz habe. Wenn ich das schon vorher herausfinde, bevor der erste byte gesendet wurde dann kann ich ja noch was machen.
-
Le Fox schrieb:
Problematisch wird es doch, wenn ich während des Schreibens erst merke, dass ich nicht genug Platz habe. Wenn ich das schon vorher herausfinde, bevor der erste byte gesendet wurde dann kann ich ja noch was machen.
Das wär ein Argument, ja. Andererseits darf es auch kein Problem darstellen, wenn der Speicher erst beim Empfangen ausgeht. Darauf muss dein Programm nämlich so oder so reagieren können: Je nach Dateisystem kann es durchaus passieren, dass du eine 1GB-Datei komplett vollgeschrieben hast, aber auf dem Dateisystem nicht mehr genügend Speicher ist, um jetzt in dieser Datei auch nur ein Byte zu verändern, weil das Dateisystem intern copy-on-write macht.
-
Ramanujan schrieb:
Deshalb möchte er direkt den Speicherplatz auf der Festplatte reservieren, um dann die empfangenen Daten gleich an die richtige Stelle der Datei schreiben zu können.
Der Trick ist halt, dass man bei gängigen Dateisystemen keinen Speicher mehr reservieren muss, sondern einfach direkt an die (noch nicht existierende) Stelle in der Datei springt, an die man schreiben möchte, und die Datei dann speicherschonend automatisch mitwächst.