Programm funktioniert nur mit kleiner Datei



  • Hi,ich hab mir ein "verschlüsselungs" Programm geschrieben,das nicht jeder meine Dateien anschauen kann:

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    char code_byte(char);
    char decode_byte(char);
    void code_file(char* );
    void decode_file(char* );
    
    int main(int argc,char* argv[])
    {
     if (argv[2][0] == 'c' )
      {
       code_file(argv[1]);
      }
    
     if (argv[2][0] == 'd' )
      {
       decode_file(argv[1]);
      }
    
    return 0;
    }
    
    void code_file(char* file_name)
    {
     char byte,buffer[1000000];
     int counter ;
    
     fstream file(file_name,ios::in); 
    
     for(counter=0;!file.eof();++counter ) 
      {
       file.get(byte);
       if (!file.eof())
       {
        buffer[counter]=code_byte(byte);
       } 
      }   
    
     counter -= 2;
    
     file.close();     
    
     fstream file2(file_name,ios::out); 
    
     for (int for_c = 0;for_c < counter+1;++for_c)
        {
        file2 << buffer[for_c];
        }
    
    }
    
    void decode_file(char* file_name)
    {
     char byte,buffer[1000000];
     int counter ;
    
     fstream file(file_name,ios::in); 
    
     for(counter=0;!file.eof();++counter ) 
      {
       file.get(byte);
       if (!file.eof())
       {
        buffer[counter]=decode_byte(byte);
       } 
      }   
    
     counter -= 2;
    
     file.close();     
    
     fstream file2(file_name,ios::out); 
    
     for (int for_c = 0;for_c < counter+1;++for_c)
        {
        file2 << buffer[for_c];
        }
    
    }
    
    char code_byte(char zeichen)
    {
     zeichen += 1;
     return zeichen;
    }
    
    char decode_byte(char zeichen)
    {
    
     zeichen -= 1;
     return zeichen;
    }
    

    Das Funktioniert aber nur bei kleineren Dateien ,wegen

    char byte,buffer[1000000];
    

    Dazu meine Frage:Wie kann ich den Buffer immer so viel Byte groß machen das ich auch große Dateien unkenntlich machen kann?Muss ich vielleicht auf ne Datei auslagern,anstatt auf ein Char Array?

    Danke im voraus,
    Xalon



  • Hast du mal versucht die Groesse der Datei auszulesen und das dann einzusetzen?
    Hat auch den Vorteil dass immer nur das reserviert wird, was du gerade brauchst!



  • Datei stückchenweise einlesen und kodieren?



  • moe szyslak schrieb:

    Hast du mal versucht die Groesse der Datei auszulesen und das dann einzusetzen?
    Hat auch den Vorteil dass immer nur das reserviert wird, was du gerade brauchst!

    Weßt du zufällig wie die Funktion heißt ? 😉

    Xalon



  • Na, ich wurde das so machen:

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <iostream>
    
    int main( int argc, char **argv )
    {
    	struct stat buf;
    	int result;
    	result = stat( argv[1], &buf );
    
    	if( result == 0 )
    		std::cout << buf.st_size << std::endl;
    
    	return 0;
    }
    

    Die Datei stueckienweise Einlesen klingt aber auch nicht schlecht.



  • fseek()/ftell() könnte da weiterhelfen - ansonsten könntest du auch einen vector<> verwenden und die Daten mit "copy(istream_iterator<char>(file),istream_iterator<char>(),back_inserter(myvector));" dort einlesen (der vector wächst mit, wenn es benötigt wird).



  • Ok,danke euch 😉

    Xalon


Anmelden zum Antworten