[C]in datei schreiben.

Hallo, hab wieder ein Problem oder genauer ein verständnissproblem, ich wollte in C ein programm schreiben(was sonst? kaffekochen?) das einen festgelegten Text in eine datei schreibt, und dies immer wieder, also ne endlosschleife.(Nicht für böse zwecke sondern einfach um zu schaun wie lange es dauert bis 200GB voll sind) Hab mir auch schon selber gedanken gemacht, tutorials gesucht usw. komme aber trotzdem nicht weiter.

Code:
 #include <stdio.h>

int main()
{
  FILE *f;
  char vname[200];
  char file_name;
 
  

 
  f = fopen("d:\\test\test.txt","a"); 

  if(f == NULL)
  {
  printf("konnte datei %s nicht erstellen");
  getchar();
  exit(0);
  }
  for(;;)
{
  fputs(vname,f);
}  
fclose(f);
  
      return 0;
}
 
Etwas angepasst... nun musst du nur noch sagen, was nicht funktioniert :rolleyes:

Und je nach Dateisystem kann es sein, dass du deine Festplatte so nicht voll bekommst!
Code:
#include <stdio.h>
#include <stdlib.h>
/* stdlib.h fehlte */

int main()
{
	FILE *f;
	char vname[]="Bla bla blabla bla. ";
	/* Initialisierung fehlte */

	char file_name[]="D:\\test\\test.txt";
	/*                         ^ fehlte */
	
	if(NULL == (f = fopen(file_name, "a"))) {
		printf("Konnte Datei \"%s\" nicht erstellen", file_name);
		/*                                          ^^^^^^^^^^^ fehlte */
		getchar();
		exit(0);
	}
	for(;;)
		fputs(vname,f);

	/* Nie erreicht! */
	fclose(f);

	return(0);
}
 
statt for(;;) fputs

würde es sich anbieten etwas kontrollierter zu schreiben

#define BLOCKSIZE 1000

void *Data = malloc(BLOCKSIZE);
if(pData){
memset(Data,' ',BLOCKSIZE);
long long Count=0;
int Result = 1;
while(Result>0){
Result = fwrite(Data,1,BLOCKSIZE,f);
Count+=Result;
}
printf("%I64d Bytes geschrieben\n",Count);
}

dann weisst du nacher auch, wie viel es gebraucht hat, um die platte zu füllen.
 
Danke nazgul, allerdings bin ich noch nicht so weit das ich da selber draufkomme. :)

Edit: kannst du mir sagen wie ich das einbaun kann?? ich hab kein plan.
 
Code:
#include <stdio.h>
#include <stdlib.h>

#define BLOCKSIZE 1000

int main()
{
        FILE *f;
        char vname[BLOCKSIZE];
        char file_name[] = "D:\\test\\test.txt";
        unsigned long long count = 0;
        int r = 0;

        memset(vname, ' ', BLOCKSIZE);

        if(NULL == (f = fopen(file_name, "a"))) {
                printf("Konnte Datei \"%s\" nicht erstellen", file_name);
                getchar();
                exit(0);
        }

        do {
                count += r;
                r =  fwrite(vname, 1, BLOCKSIZE, f);
        } while(r > 0);

        printf("%llu Bytes geschrieben (~%llu GB)\n",count, count / 1024 / 1024 / 1024);

        fclose(f);

        return(0);
}
 
BLOCKSIZE ist eine Konstante, die beim Übersetzen (bzw kurz vorher) durch 1000 ersetzt wird.

Daher ist vname ein char-Array mit 1000 Elementen. Mit memset wird nun dieses Array mit Leerzeichen aufgefüllt.

Code:
do {
                count += r;
                r =  fwrite(vname, 1, BLOCKSIZE, f);
        } while(r > 0);
Schreibt nun die Daten (vname) von je 1 Byte und das BLOCKSIZE (also 1000) mal in die Datei von f.
r ist dann die Anzahl der geschriebenen "1 Byte"-Stücke oder <=0 beim Fehler.
Daher soll die Schleife nur bei r > 0 (es konnte was geschrieben werden) weitermachen.

Am ende wird dann die Summe aller positiven r (count += r) ausgegeben.


Falls was anderes das Problem ist, schreib es :)
 
Zurück
Oben