Schnelles schreiben in Datei



  • Ich hoffe ich habe richtig gesucht.

    Ich beschreibe eine Datei und schaffe in einer minute 3.2 GB.
    Geht das schneller?

    Ziel ist es eine Datei möglichst schnell zu erzeugen.

    Würde mich über Hilfe freuen.

    (Kann sein dass ich hier erst wieder in 2-3 Wochen reinschau, da ich den nächsten Monat Schule habe.)



  • Das sind grob überschlagen etwa 50MB pro Sekunde. Schneller wird eine normale HD kaum schreiben können.



  • wie realisierst du diesen schreibvorgang?



  • Relativ simpel:

    #include <stdio.h>
    #include <windows.h>
    #include <conio.h>
    
    int main( void )
    {
    	int datei, i;
    	float mb, gb;
    	printf( "Bitte Pfad angeben: " );
    	char *path;
    	path = malloc( sizeof(char)*255 );
    	scanf( "%s", path );
    
    	printf( "\n1:%s", path );
    	datei = creat( path, 0777 );
    	char *buff;
    	buff = malloc( sizeof(char)*1024*10 );
    	i = 0;
    	memset( buff, '0', sizeof( buff ) );
    
    	while( 5 <= write( datei, buff, 1024 ) )
    	{
    		i++;
    		if( 0 == ( i % ( 1024 * 20 ) ) )
    		{
    			mb = i / 1024;
    			gb = mb / 1024;
    
    			printf( "%.2f - GB\n", gb );
    		}
    	}
    
    	unlink( path );
    }
    

    Ahso, bevor irgendwer dass bemerkt.
    Dass mit der Variable path funktioniert noch nicht. Ich weis nicht genau warum.
    Ich suche noch, aber wenn du path durch z.b. "D:\#EXISTFOLDER\" ersetzt funktionierts sicher.

    Die Abbruchbedingung funktioniert noch nciht ganz.



  • #include <stdio.h>
    #include <windows.h>
    #include <conio.h>
    
    int main( void )
    {
    	int datei, i;
    	float mb, gb;
    	printf( "Bitte Pfad angeben: " );
    	char *path;
    	path = malloc( sizeof(char)*255 );
    
    	scanf( "%s", path );
    
    	strcpy( path + strlen( path ), "\\test.clr" );
    
    	datei = creat( path, 0777 );
    	char *buff;
    	buff = malloc( sizeof(char) * 1024 * 10 );
    	i = 0;
    	memset( buff, '0', sizeof( buff ) );
    
    	printf( "\nZiel: %s\n", path );
    
    	while( 5 <= write( datei, buff, 1024 * 10 ) )
    	{
    		i++;
    		if( 0 == ( i % ( 1024 * 50 ) ) )
    		{
    			mb = ( i / 1024 ) * 10;
    			gb = mb / 1024;
    
    			printf( "%.2f - GB\n", gb );
    		}
    	}
    
    	unlink( path );
    }
    

    So funktioniert schonmal die variable Pfadangabe.



  • Sry wwegen dem 3er Post,
    vieleicht hat sich schon jemand gewundert..

    #include <stdio.h>
    #include <windows.h>
    #include <conio.h>
    
    int main( void )
    {
    	int datei, i;
    	float mb, gb;
    	printf( "Bitte Pfad angeben: " );
    	char *path;
    	path = malloc( sizeof(char)*255 );
    
    	scanf( "%[^\n]", path );
    	strcpy( path + strlen( path ), "\\test.clr" );
    
    	datei = creat( path, 0777 );
    	char *buff;
    	buff = malloc( sizeof(char) * 1024 * 10 );
    	i = 0;
    	memset( buff, '0', sizeof( buff ) );
    
    	printf( "\nZiel: %s\n", path );
    
    	while( 5 <= write( datei, buff, 1024 * 10 ) && !kbhit() )
    	{
    		i++;
    		if( 0 == ( i % ( 1024 * 25 ) ) )
    		{
    			mb = ( i / 1024 ) * 10;
    			gb = mb / 1000;
    
    			printf( "%.2f - GB\n", gb );
    		}
    	}
    
    	datei = 0;
    
    	printf( "\n\n\"%s\" will be deleted in 5 seconds...", path );
    	Sleep( 1000 );
    	printf( "\n\"%s\" will be deleted in 4 seconds...", path );
    	Sleep( 1000 );
    	printf( "\n\"%s\" will be deleted in 3 seconds...", path );
    	Sleep( 1000 );
    	printf( "\n\"%s\" will be deleted in 2 seconds...", path );
    	Sleep( 1000 );
    	printf( "\n\"%s\" will be deleted in 1 seconds...", path );
    	Sleep( 1000 );
    	printf( "\n\nDeleting: %s ...", path );
    	Sleep( 1000 );
    
    	i = remove( path );
    
    	if( -1 == i )
    		perror( "\n\tcannot deleting file:\t\t " );
    	else
    		printf( "\t\tsucsessfull" );
    
    	return 0;
    }
    

    perror gibt mir permission denied aus... Aber ich kann ja die Datei auch nicht löschen... Ist ja irgendwie klar... Ist ja ein Intwert.

    Kann mir da wer Helfen?


Anmelden zum Antworten