Größte für ein System mögliche Textdatei



  • Moin an alle 😉
    Habe folgende Aufgabe bekommen:
    "Erstelle ein C++ Programm, welches die größte für ein System mögliche Textdatei erzeugt. Das Programm soll nicht mit einem Fehler abbrechen und die Dateigröße auf dem Bildschirm ausgeben."

    Das Öffnen und Anlegen einer datei etc. ist auch kein Problem, jedoch weiß ich nicht, wie das mit der Größten für ein System möglichen Textdatei gemeint ist ?! Es hat ja warscheinlich etwas mit 32 und 64 bit system zutun oder?

    Achja, und wir sind gerade erst in c++ eingestiegen, nachdem wir elendig lange C durchgegangen sind 😉 von daher kenne ich bisher nur kleine Standard Sachen 😉

    Außerdem weiß ich grade nicht mit welcher Funktion ich die Größe der Textdatei ausgeben soll... Als Notlösung würde ich mitdem Programm auf die cmd-Shell und von da auf die Datei zugreifen, und die Größe daraus auslesen

    Danke für die Hilfe,
    MFG, eSKape ^^



  • Es ist egal was für ein Dateityp das ist. Das Betriebssystem stellt den Speicher bereit (wenn physikalisch genug vorhanden). Wie groß der ist hängt auch davon ab ob 32 oder 64 bit [232 oder 264] Zustände.
    Wenn die in das Dateisystem geschrieben werden dann kommt es auch auf das Dateisystem an. Kennst du noch die 2 GB Grenze bei FAT32?
    Wobei man (durch einen Trick) bei einem 32 Bit System mehr als 232 Bits speichern kann.
    Ob der Texteditor mit der Datei (effizient) umgehen kann ist eine andere Frage.



  • es gibt schon sonderbare Aufgaben

    du könntest natürlich eine Datei erzeugen und wenn das erzeugen geklappt hat, sie löschen und eine um 1 Byte größere Datei erzeugen und so weiter, bis das erzeugen fehlschlägt. Die letzte Größe, die geklappt hat weißt du dann ja...
    nur das diese Grenze in derzeit nicht sehr leicht erreichbaren Dimensionen liegt (bei NTFS in der Praxis aktuell 256 Terabyte, ext3 bis 32 TB, ext4 bis ein Exabyte und HFS+ bis 16 EB) und die Laufzeiten für dein Programm sehr hoch sein würden und das System ziemlich in die Knie gezwungen wird

    da wäre es simpler, du frägst das Dateisystem ab (geht nicht mit Standardmitteln) und gibst davon abhängig die Größe aus



  • Was gibt denn folgendes Programm aus?

    #include <fstream>
    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main(){
    	int const blocksize=10000000;
    	char* buffer=new char[blocksize];
    	ofstream out("test.dat");
    	double size=0;
    	for(;;){
    		if(!out.write(buffer,blocksize)){
    			cout<<"Oh, ein Fehler.\n";
    			return 0;
    		}
    		size+=blocksize;
    		cout<<"Bisher geschrieben: "<<setprecision(20)<<size<<endl;
    	}
    }
    


  • eSKape schrieb:

    Moin an alle 😉
    Habe folgende Aufgabe bekommen:
    "Erstelle ein C++ Programm, welches die größte für ein System mögliche Textdatei erzeugt. Das Programm soll nicht mit einem Fehler abbrechen und die Dateigröße auf dem Bildschirm ausgeben."

    bei so ner dämlichen frage, sollte man nach länge und breite des systems fragen.



  • volkard schrieb:

    Was gibt denn folgendes Programm aus?

    #include <fstream>
    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main(){
    	int const blocksize=10000000;
    	char* buffer=new char[blocksize];
    	ofstream out("test.dat");
    	double size=0;
    	for(;;){
    		if(!out.write(buffer,blocksize)){
    			cout<<"Oh, ein Fehler.\n";
    			return 0;
    		}
    		size+=blocksize;
    		cout<<"Bisher geschrieben: "<<setprecision(20)<<size<<endl;
    	}
    }
    

    joa, was soll ich darauf antworten?
    macht halt ne datei immer größer, bis irgendwann die platte voll ist ?!

    und ach ja, kann auch nix dafür wenn wir so eine Aufgabe bekommen 😃 normalerweise gibt der Lehrer gescheite Aufgaben :-$

    --> und normalerweise denke ich nicht das der SInn der Aufg. gewesen sein sollte, nen Programm zuschreiben, was die Platte vollknallt 😃



  • Es ist aber oft so, daß man mit Vollknallen größere Dateien machen kann als mit fseek und Konsorten. Daher ist Vollknallen schon gar nicht so extrem doof. Außerdem hat man ein TB ja ruck zuck über Nacht geschrieben.



  • Da hat er ja schon mal Grundlage für ein gründliches Festplattenlöschprogamm 😉
    Wenn er das noch ein wenig ausbaut, wird das schon.

    MfG f.-th.



  • f.-th. schrieb:

    Da hat er ja schon mal Grundlage für ein gründliches Festplattenlöschprogamm 😉
    Wenn er das noch ein wenig ausbaut, wird das schon.

    Multithreading für mehr Performance natürlich. Zwölf Threads schreiben die Platte ganz bestimmt zwölfmal so schnell voll.



  • volkard schrieb:

    Multithreading für mehr Performance natürlich. Zwölf Threads schreiben die Platte ganz bestimmt zwölfmal so schnell voll.

    mit sicherheit nicht, da es von der schreibrate einer normalen festplatte begrenzt wird- nicht vom c-programm....wir proggn doch net in java 😉



  • volkard schrieb:

    Was gibt denn folgendes Programm aus?

    #include <fstream>
    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main(){
    	int const blocksize=10000000;
    	char* buffer=new char[blocksize];
    	ofstream out("test.dat");
    	double size=0;
    	for(;;){
    		if(!out.write(buffer,blocksize)){
    			cout<<"Oh, ein Fehler.\n";
    			return 0;
    		}
    		size+=blocksize;
    		cout<<"Bisher geschrieben: "<<setprecision(20)<<size<<endl;
    	}
    }
    

    Nix gescheites, hängt immer davon ab wieviel Platten das System hat. Mit std::C++ kann man das nicht ordentlich lösen.


Anmelden zum Antworten