Leere Datei (nur Nullen) mit festlegbarer Grösse erzeugen



  • Hallo zusammen,

    ich suche ein Konsolentool mit dem ich "leere" Dateien generieren kann, deren Grösse z.B. so festlegen kann: tool.exe 1024 (erzeugt eine Datei, die genau 1 KB belegt d.h. die Zahl hinter exe soll die Grösse der zu erzeugenden Datei in Byte sein) Schön wäre es, wenn man statt z.B. nur Nullen zu wiederholen auch Zufallsfolgen von Ziffern bzw. Buchstaben generieren könnte.

    Vielleicht kann man ja auch noch den Namen der zu erzeugenden Datei festlegen?

    Bsp.: tool.exe 1024 123w testdatei.txt -> erzeugt eine Datei namens testdatei.txt Grösse 1Kb, Inhalt 123w123w123w...

    oder

    Bsp.: tool.exe 1024 random testdatei.txt -> s.o., nur die Zeichenfolge ist zufällig

    Meine Terminologie lässt unschwer erahnen, daß Programmieren keine Tugend von mir ist.

    Umso mehr freue ich mich über Ideen bzw. Lösungen (und natürlich auch Erklärungen) eurerseits.

    Danke und einen schönen Tag

    Johannes



  • Schaue dir die Paramter an.
    Bei Konsolenprogrammen argc und argv.

    Die wertest du aus, ob Zufallszahlen oder fester String.

    Wenn du Zufallszahlen nimmst, seh dich nach einer Random Funktion um, oder nimm die breitsenthaltene. Wenn du nun char(dein Zufallsinteger) nimmst und random von 0-255 nimmst kannst du auch Zeichen schreiben.

    Jetzt pack alles in ein char Array und schreibe den Array in die Datei.

    Wenn die Datei nun 10Mb oder so ist musst du das mit mehren Durchläufen schreiben.



  • Und warum nicht einfach man: dd nehmen?
    Ich verstehe diesen Drang, immer alles selbst schreiben zu wollen irgendwie echt nicht gut. 🙄



  • nman schrieb:

    Ich verstehe diesen Drang, immer alles selbst schreiben zu wollen irgendwie echt nicht gut. 🙄

    Ich schon.
    Denn nicht selten handelt es sich nur um Teilprobleme, die zudem noch oftmals wiederkehren. Und da ist es doch schön, wenn man schon auf eigene Erfahrung zurückgreifen kann.



  • SeppSchrot schrieb:

    Denn nicht selten handelt es sich nur um Teilprobleme, die zudem noch oftmals wiederkehren. Und da ist es doch schön, wenn man schon auf eigene Erfahrung zurückgreifen kann.

    Klar, darum ist sowas ja auch ganz besonders süß für Übungsprogramme, da freut sich jeder darüber.
    Aber wenn ich eine fertige Lösung brauche, kombiniere ich lieber 2 Tools die X und Y machen zu XY, als mir XY neu zu schreiben.



  • Vielen Dank für Eure Antworten!

    dd habe ich jetzt erst durch Deine Antwort kennengelernt.

    Wie gesagt, ich bin Novize. Ist einer von Euch evtl. so freundlich - natürlich nur, wenn das nicht viel Umstand bereitet (weiss ich ja nicht) - ein paar Schnipsel Code zur Verfügung zu stellen?

    Danke

    Johannes



  • Unix:
    Datei mit 256 Bytes (mit lauter Nullen gefüllt) erstellen:

    dd if=/dev/zero of=test.txt bs=256 count=1
    


  • Hallo nman,

    gibt es dd denn auch für Windosen? Wo kann ich es finden?

    Antwort würde mich freuen

    Johannes



  • Hallo,

    es gibt auf jeden Fall die Möglichkeit, eine Linux Umgebung mit Cygwin zu emulieren:
    http://www.cygwin.com/

    Dort hast du die Möglichkeit jegliche Linux Kommandos zu nutzen. Ist vielleicht auch für die Zukunft ein nettes Feature.

    Ansonsten hier:
    http://uranus.it.swin.edu.au/~jn/linux/rawwrite/dd.htm



  • Und falls du´s doch selber schreiben willst:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[ ]) 
    { 
      FILE *Datei;
      unsigned int i, Anzahl;
    
      if (argc < 3) return -1; //Kein Parameter
      Anzahl = atoi(argv[2]);
      if (!Anzahl) return -1; //0 Byte oder keine Zahl 
    
      Datei = fopen(argv[1],"w+b");
      if (!Datei) return -1; //Konnte Datei nicht öffnen
    
      for (i=0; i<Anzahl; i++)
      {
        unsigned char Wert = rand()%256;	
        fwrite(&Wert, 1, 1, Datei); 
      } 	
    
      //Alles klar
      return 0;
    }
    

    Ist zwar "nur" C, aber was solls 😉



  • Hallo SeppSchrot,

    vielen Dank für Deinen Code. 🙂

    Ich habe ihn zwar mit Dev-C++ erfolgreich kompilieren können, aber es erfolgt bei Ausführung leider keine Erstellung einer Datei. 😞

    Wahrscheinlich bin ich einfach zu unbeholfen, ist mir das Programmieren noch zu fremd.

    Oder habe ich etwas komplett missverstanden?

    Lieber Gruss

    Johannes



  • Hast du das kompilierte Programm denn mit Parametern aufgerufen??? Ansonsten bricht es einfach ohne Fehlermeldung (kein guter Stil) ab.



  • Nochmal hallo Sepp

    und vielen Dank. 🙂

    Es funktioniert. Jetzt versuche ich mal, mich mit dem Code anzufreunden. 😉

    Schönen Tag

    Johannes


Anmelden zum Antworten