Resource-Datei-Generator (Version1)

Präsentation und Organisation von eigenen Projekten
Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Resource-Datei-Generator (Version1)

Beitrag von Dirty Oerti » Fr Jul 11, 2008 11:18 pm

Tag! :)

Ich stell das mal online.
Wenn es euch interessiert könnt ihr es euch ja mal ansehen :)

Aufgabe:
Erstellt aus mehreren (per Kommandozeilenparameter) angegebenen Dateien (Ordner anzugeben ist NICHT möglich!) eine einzige Datei.
Die Dateien werden in keinster Weise verändert/komprimiert/o.ä.

Das Programm speichert in die neue Datei, die sog. Resourcedatei, wieviele Dateien in ihr enthalten sind, wo sie beginnen (relativ zum Ende des Headers) und natürlich die Datei selbst mit Dateinamen.
Es können wegen dynamisch großen Addressierungen auch relativ große Dateien gespeichert werden.

Was noch fehlt:
Unterstützung für Ordner
Programm, um die Dateien wieder herrauszubekommen (^^)

Ich übernehme wie immer keine Verantwortung für Schäden, die das Programm anrichtet.
Auch wenn das Programm natürlich nicht darauf ausgerichtet ist, Schäden anzurichten.

Bei Fragen und Bugs: Raus damit! ;)

MfG
Daniel

main.cpp

Code: Alles auswählen

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <iostream>
#include <cstdlib>

using namespace std;



#include "def1.h"
#include "func1.h"


int main(int argc, char *argv[])
{
        int Files_to_pack = 0;
        int ParamFiles_Count = argc -1;
        packmf2 *packme;


        /*INTRO UND PARAMETERÜBERPÜRFUNG*/
        cout << "*- Resource File Generator - 2nd Version -*\n" << endl;
        cout << "Anzahl an Dateien zu packen:   " << ParamFiles_Count << endl;
        if (ParamFiles_Count <= 0) {
                cout << "SORRY, aber ohne Dateien geht's nicht..." << endl;
                exit(-1);
        }
        /*ÜBERPRÜFUNG DER DATEIEN*/
        cout << "-----Dateien:-----" << endl;
        for (int i=0; i<ParamFiles_Count; i++) {
                cout<< i+1 << "   ";
                if (Filecanbeopend(argv[i+1])) {
                        cout << " OK    ";
                        Files_to_pack++;
                } else {
                        cout << "NOPE   ";
                }
                cout << argv[i+1] << endl;
        }
        cout << "------------------" << endl;
        cout << "Verfügbare Dateien:   " << Files_to_pack << endl;
        if (Files_to_pack<=0) {
                cout << "SORRY, keine Daten verfügbar..." << endl;
                exit(-1);
        }
        /*DATEIARRAY MIT INFOS ERZEUGEN*/
        cout << "Erzeuge Dateiarray..." << endl;
        packme = new packmf2[Files_to_pack];
        int tmp = 0;
        for (int i=0; i<ParamFiles_Count; i++) {
                cout<< i+1 << "   ";
                if (Filecanbeopend(argv[i+1])) {
                        cout << "GETS PACKED    ";
                        packme[tmp].name = argv[i+1];
                        packme[tmp].filesize = GetFileSize(packme[tmp].name.c_str());
                        packme[tmp].file.open(packme[tmp].name.c_str());
                        tmp++;
                        if (tmp>Files_to_pack) {
                                cout << "SORRY, irgendwas ist hier ordentlich schief gelaufen...";
                                exit(-1);
                        }
                        cout << "Arrayeintrag erfolgreich eingetragen" << endl;
                } else {
                        cout << "NOT TO PACK    Kein Arrayeintrag nötig" << endl;
                }

        }
	
	cout << CreateResourceFile(packme,Files_to_pack);

        for (int i=0;i<Files_to_pack;i++) {
                cout << "Schließe Datei Nr." << i+1;
                packme[i].file.close();
                cout << "    OK!" << endl;
        }

        delete [] packme;
        return 1;
}
def1.h

Code: Alles auswählen

#ifndef __RFG_V2_DEF1_H_
#define __RFG_V2_DEF1_H_

#include <fstream>
#include <string>


#define BYTES(x) (x)
#define KBYTES(x) (x*1024)



typedef class __packme_file_v2
{
private:
public:
        unsigned long filesize;
        //int namesize;
        string name;
        fstream file;
}packmf2;

typedef char Byte;

#endif
func1.h

Code: Alles auswählen

#ifndef __RFG_V2_FUNC1_H_
#define __RFG_V2_FUNC1_H_

#include <fstream>
#include <string>

#include "def1.h"

#define BIT_N(x) (base_exponent(x,2))


// Bit: 7 6 5 4 3 2 1 0
// 7,6,5 = Versionsnummer (0=Version1, 1=Version2, etc)
// 4 = Gepackt? (1 = Ja)
// 3 = Verschlüsselt? (1 = Ja)
// 2 = Viele/Wenige Dateien (mehr als 256 ?) (1 = Ja)
// 1,0 = Unbenutzt
#define _VERSION_I_V2 (BIT_N(5))
#define _VERSION_I_PACKED (BIT_N(4))
#define _VERSION_I_M256 (BIT_N(2))


unsigned long base_exponent(short exp, short base);
unsigned long GetFileSize(string filename);
short Filecanbeopend(string filename);





short CreateResourceFile(packmf2 *Packarray, int File_Count)
{
        fstream ResFile;
        ResFile.open("ResFile.rf2", ios_base::in | ios_base::out | ios_base::binary | ios_base::trunc );
        if (ResFile == NULL) {
                return -1;
        }
        //
	
	/*HEADER*/
        unsigned char VersionInfo = 0;
        VersionInfo = _VERSION_I_V2 | 0;
        if (File_Count > 256) {
                VersionInfo |= _VERSION_I_M256;
                if (File_Count > 65536) {
                        return -1;
                }
        }
        ResFile.write((const char*)&VersionInfo,BYTES(1));
        if (File_Count <= 256) {
                ResFile.write((const char*)&File_Count,BYTES(1));
        } else {
                ResFile.write((const char*)&File_Count,BYTES(2));
        }
        short EndofInfo = ResFile.tellp();
        unsigned long tmp = 0;
        unsigned long tmp2 = 0;
        int extra_bytes = 0;
        ResFile.write((const char*)&tmp,BYTES(1)); // tmp= 0 => 0 Bytes extra=> Start an 0
        /* Aufbau:

        Byte 1 |  7 6 5 4 3 2 1 0
        // Bit 7-3 : Anzahl Bytes (max 32)
        // Bit 2,1,0 : Positionsbits (wenn mehr Bytes, dann die ersten)

        //Byte 2,3,... : weitere Positionsbits

        */
        for (int i=1; i<File_Count; i++) {
                // Wo kommt der neue Header hin?
                tmp += Packarray[i-1].filesize; //Datei muss rein
                tmp += (1); //Speicher für Anzahl Zeichen im Namen der Datei muss rein
                tmp += Packarray[i-1].name.length();// Speicher für den Namen
                if (tmp < 8) {
                        tmp2 = (tmp & 7);
                        ResFile.write((const char*)&tmp2,BYTES(1));
                } else {
                        extra_bytes = 1;// Ein weiteres Byte
                        tmp2 = 0;
                        while (tmp2 < tmp) {// Kann ich genügend Bytes addressieren?
                                tmp2 = (base_exponent( (3+extra_bytes*8), 2)); // Wieviele Bytes kann ich addressieren?
                                extra_bytes++;// Also noch eins
                        }
                        extra_bytes--;// Damits stimmt.
                        if (extra_bytes > 32) {
                                cout << "SO VIEL SPEICHER GIBT ET NET!!";
                                exit(-1);
                        }
                        tmp2 = 0;
                        tmp2 = (extra_bytes << 3); //Anzahl an zusätzlichen Bytes speichern
                        tmp2 |= (tmp) >> ((3+extra_bytes*8)-3);//Erste 3 Bits der Position speichern
                        ResFile.write((const char*)&tmp2,BYTES(1));//Ab in die Datei
                        ResFile.write((const char*)&tmp,BYTES(extra_bytes));//Restliche Bytes mit Position schreiben
                }
        }
	unsigned long header_end = ResFile.tellp();
	/* HEADER-ENDE */
	/* BODY */
	tmp = 0;
	tmp2 = 0;
	char buff = 0;
	for (int i=0; i<File_Count; i++) {
		tmp = Packarray[i].name.length();//Speichere Dateinamengröße
		ResFile.write((const char*)&tmp,BYTES(1));//und schreibe in Datei (max Dateinamengröße=2^8=256)
		ResFile.write((const char*)Packarray[i].name.c_str(),BYTES(tmp));
		buff = 0;
		while (Packarray[i].file.good()) {
			Packarray[i].file.read((char*)&buff,BYTES(1));
			ResFile.write((const char*)&buff,BYTES(1));
		}
		
	}
	/* BODY-ENDE */
	tmp = BIT_N(7) | BIT_N(5) | BIT_N(3) | BIT_N(1);//Signatur ( 1 0 1 0 1 0 1 0 )
	ResFile.write((const char*)&tmp,BYTES(1));
        ResFile.close();
        return 0;
}



/**
 * Gibt die Dateigröße in Form eines Longwertes zurück. Einheit ist Bytes.
 * @param filename: Der Dateiname
 * @return size: Größe der Datei in Bytes
 */
unsigned long GetFileSize(string filename)//in Byte
{
        unsigned long size = 0;
        fstream file;
        file.open(filename.c_str(),ios_base::in | ios_base::out);
        if (file==NULL) {
                return 0;
        }
        file.seekg(0,ios::end);
        size = file.tellg();
        file.close();
        return size;
}


/**
 * Überprüft ob die angegebene Datei geöffnet/gelesen werden kann
 * @param filename : Der Dateiname
 * @return 1, wenn Datei geöffnet werden kann, ansonsten 0
 */
short Filecanbeopend(string filename)
{
        fstream file;
        file.open(filename.c_str());
        if (file==NULL) {
                return 0;
        } else {
                file.close();
                return 1;
        }
}




/**
 * Gibt Basis hoch Exponent zurück. Nur gerade Exponenten werden unterstützt. Achtung bei großen Zahlen!
 * @param exp : Exponent
 * @param base : Basis
 * @return result : Basis hoch Exponent
 */
unsigned long base_exponent(short exp, short base)
{
        unsigned long result = 1;
        for (short i=0; i < exp; i++) {
                result *= base;
        }
        return result;
}


#endif
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Resource-Datei-Generator (Version1)

Beitrag von Xin » Fr Jul 11, 2008 11:50 pm

Ich habe jetzt nur SEHR schnell überflogen, also von dem Programm nix wirklich gesehen.

Es spricht grundsätzlich nichts dagegen Code per #include in ein (1,0) main.cpp zu übernehmen.
Es spricht aber auch nicht für guten Programmierstil.

Wenn Du mehrer Codefiles hast, kompiliere die am besten auch als .cpp einzeln und linke sie nachher zusammen.
Schau dir mal Make an oder lass Deine IDE das für Dich regeln.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Resource-Datei-Generator (Version1)

Beitrag von Kerli » Sa Jul 12, 2008 12:12 am

Ich hab den Code jetzt auch nur einmal schnell überflogen. Wenn du schon mit C++ programmierst, warum verwendest du dann bei der Klassendefinition ein 'typedef'? Das ist nur deshalb möglich, um C Programmierern den Umstieg zu erleichtern. Es ist aber nicht sicher, dass das von jedem Compiler unterstützt wird.
Ansonsten schaut es ganz ordentlich aus, obwohl du noch etwas an deinem Codingstandard arbeiten solltest. ;)
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Resource-Datei-Generator (Version1)

Beitrag von Xin » Sa Jul 12, 2008 12:15 am

Kerli hat geschrieben:Ich hab den Code jetzt auch nur einmal schnell überflogen. Wenn du schon mit C++ programmierst, warum verwendest du dann bei der Klassendefinition ein 'typedef'? Das ist nur deshalb möglich, um C Programmierern den Umstieg zu erleichtern. Es ist aber nicht sicher, dass das von jedem Compiler unterstützt wird.
Ich würde sagen, das ist normale Syntax für typedef, aber von Umstieg erleichtern sehe ich da nix, das ist eher komplizierter als einfacher :-/
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Resource-Datei-Generator (Version1)

Beitrag von Kerli » Sa Jul 12, 2008 12:27 am

Xin hat geschrieben:Ich würde sagen, das ist normale Syntax für typedef, aber von Umstieg erleichtern sehe ich da nix, das ist eher komplizierter als einfacher :-/
Ja, das schon, aber es ist nur ein Überbleibsel von C und sollte in neuem Code auch nicht mehr verwendet. Außerdem sehe ich keinen Vorteil von 'typedef' gegenüber der üblichen C++-Schreibweise.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Resource-Datei-Generator (Version1)

Beitrag von Dirty Oerti » Sa Jul 12, 2008 9:44 am

Tag! :)

Aaaalso:

Ich weiß, dass ich nicht 100% gemäß dem Standartstil schreibe.
Xin hat geschrieben:Es spricht grundsätzlich nichts dagegen Code per #include in ein (1,0) main.cpp zu übernehmen.
Es spricht aber auch nicht für guten Programmierstil.

Wenn Du mehrer Codefiles hast, kompiliere die am besten auch als .cpp einzeln und linke sie nachher zusammen.
Schau dir mal Make an oder lass Deine IDE das für Dich regeln
Weiß ich. Warum ich's trotzdem mach.
Naja, weil's so schneller geht, als wenn ich jedesmal eine neue cpp-Datei mit einbinden muss.

Die Unterteilung in die Header dient für mich hier nur zur Überichtlichkeit.
Anstatt den Code in einer Datei zu schreiben und dann immer hin und her zu scrollen, lager ich den Code in die Headerdateien aus und lass sie dann zusammenfügen. (Der Compiler bekommt den Code ja (dank include und Präprozessor) genauso, als ob ich alles in eine Datei geschrieben hätte)

Wenn mir jemand zeigt wie's besser/schneller geht, dann ruhig her damit ;)

Kerli hat geschrieben:Wenn du schon mit C++ programmierst, warum verwendest du dann bei der Klassendefinition ein 'typedef'? Das ist nur deshalb möglich, um C Programmierern den Umstieg zu erleichtern. Es ist aber nicht sicher, dass das von jedem Compiler unterstützt wird.
:) Die typedefs haben für mich einen einfachen und sehr praktischen Nutzen.
Ich bin ein Programmierer und damit grundsätzlich faul.
Die typedefs dienen nur dazu, dass ich nicht jedes mal

Code: Alles auswählen

       //....
       class person NeuePerson;
schreiben muss sondern das so regeln kann:

Code: Alles auswählen

typedef class __person {
//...
int a
} person;

//...
int function () 
{
    person NeuPerson;
    //...
}

Komplizierter finde ich das nicht.
Es erleichtert Schreibarbeit.

Übrigens kenne ich es nicht anders^^.
So ziemlich jedes Tutorial, dass ich mir durchgelesen hab und was mit Klassen drinne hat, hat typedefs benutzt.
Auch für andere Zwecke hab ich ein typedef schon gesehen.
Ich sag dazu nur:

Code: Alles auswählen

typedef char Byte;
Ich würde typedef also nicht gerade als "Ding zum Umstieg erleichtern für C Programmierer" sehen.
Davon hab ich ehrlich gesegt noch nichts gehört...

Naja, abgesehen von dem Programmierstil, hat sich überhaupt jemand das Programm angesehen?^^ :D

MfG
Daniel
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Resource-Datei-Generator (Version1)

Beitrag von Kerli » Sa Jul 12, 2008 10:09 am

Dirty Oerti hat geschrieben:

Code: Alles auswählen

//....
class person NeuePerson;
Auch wenn du kein typedef verwendest, kannst du trotzdem Klassen ohne 'class' hinschreiben zu müssen instanzieren.

Code: Alles auswählen

class Test
{
  public:
    Test(){};
}
// ...
function blaBla()
{
Test test_instance;
//...
So etwas funktioniert ohne Probleme, und ist was ich weis die übliche Verwendung von Klassen in C++.
Dirty Oerti hat geschrieben:Naja, abgesehen von dem Programmierstil, hat sich überhaupt jemand das Programm angesehen?^^ :D
Ja, ich. Sonst könnte ich ja nichts über deinen Programmierstil sagen ;) Warum schreibst du eigentlich eine eigene Funktion zum Potenzieren?
Ansonsten kann ich, außer dass du manchmal die Filestreams unnötigerweise zum Lesen und Schreiben öffnest, nichts mehr gegen dein Programm sagen. Schaut ganz gut aus, und wenn man mit Dateien umgehen kann, ist das immer recht nützlich...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Resource-Datei-Generator (Version1)

Beitrag von Dirty Oerti » Sa Jul 12, 2008 10:16 am

Kerli hat geschrieben:
Dirty Oerti hat geschrieben:

Code: Alles auswählen

//....
class person NeuePerson;
Auch wenn du kein typedef verwendest, kannst du trotzdem Klassen ohne 'class' hinschreiben zu müssen instanzieren.

Code: Alles auswählen

class Test
{
  public:
    Test(){};
}
// ...
function blaBla()
{
Test test_instance;
//...
So etwas funktioniert ohne Probleme, und ist was ich weis die übliche Verwendung von Klassen in C++.
Du hast Recht. Wusste ich nicht^^
Muss aber ehrlich sagen, dass ich das bisher definitiv nicht anders gesehen habe^^
Funktioniert das auch mit struct?

Kerli hat geschrieben:
Dirty Oerti hat geschrieben:Naja, abgesehen von dem Programmierstil, hat sich überhaupt jemand das Programm angesehen?^^ :D
Ja, ich. Sonst könnte ich ja nichts über deinen Programmierstil sagen ;) Warum schreibst du eigentlich eine eigene Funktion zum Potenzieren?
Ansonsten kann ich, außer dass du manchmal die Filestreams unnötigerweise zum Lesen und Schreiben öffnest, nichts mehr gegen dein Programm sagen. Schaut ganz gut aus, und wenn man mit Dateien umgehen kann, ist das immer recht nützlich...
Funktion zum Potenzieren: Naja, warum nicht^^ Sonderlich schwer war das nun nicht...

Filestreams: Wo denn? Ich möcht ja versuchen das ganze möglichst optimiert ablaufen zu lassen. :)


MfG
Daniel
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Resource-Datei-Generator (Version1)

Beitrag von Kerli » Sa Jul 12, 2008 10:35 am

Dirty Oerti hat geschrieben:Muss aber ehrlich sagen, dass ich das bisher definitiv nicht anders gesehen habe^^
Komisch, ich hab das bis jetzt in jedem C++ Tutorial oder Buch so gesehen :)
Dirty Oerti hat geschrieben:Funktioniert das auch mit struct?
Ja, unter C++ sind Strukturen eigentlich das gleiche wie Klassen, der einzige Unterschied ist, dass bei einer Klasse standardmäßig alles 'private' ist, und bei einer Struktur alles 'public'.
Dirty Oerti hat geschrieben:Funktion zum Potenzieren: Naja, warum nicht^^ Sonderlich schwer war das nun nicht...
Aber wenn es so eine Funktion schon in der Standardbibliothek gibt, dann braucht man eigentlich keine neue Funktion schreiben, außer man kann ein optimierte Version schreiben.
Dirty Oerti hat geschrieben:Filestreams: Wo denn? Ich möcht ja versuchen das ganze möglichst optimiert ablaufen zu lassen. :)
Hier zum Beipiels:

Code: Alles auswählen

short CreateResourceFile(packmf2 *Packarray, int File_Count)
{
        fstream ResFile;
        ResFile.open("ResFile.rf2", ios_base::in | ios_base::out | ios_base::binary | ios_base::trunc );
        // ....
Du öffnest die Datei zum Lesen und Schreiben, obwohl du nachher nur in die Datei hineinschreibst. Bist du dir eigentlich sicher, dass du an der Stelle, wenn eine Datei mit dem gleichen Namen schon existiert die neuen Daten anhängen willst und nicht die vorhandene Datei einfach überschreiben willst.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Resource-Datei-Generator (Version1)

Beitrag von Dirty Oerti » Sa Jul 12, 2008 11:07 am

Kerli hat geschrieben:
Dirty Oerti hat geschrieben:Funktioniert das auch mit struct?
Ja, unter C++ sind Strukturen eigentlich das gleiche wie Klassen, der einzige Unterschied ist, dass bei einer Klasse standardmäßig alles 'private' ist, und bei einer Struktur alles 'public'.
I know. Bin nur bis jetzt wirklich davon ausgegangen, dass man das struct mithinschreiben muss.
Kerli hat geschrieben:
Dirty Oerti hat geschrieben:Funktion zum Potenzieren: Naja, warum nicht^^ Sonderlich schwer war das nun nicht...
Aber wenn es so eine Funktion schon in der Standardbibliothek gibt, dann braucht man eigentlich keine neue Funktion schreiben, außer man kann ein optimierte Version schreiben.
Naja, es hat das Projekt nicht verlangsamt oder aufgehalten.
Die Funktion ist ja nicht gerade aufwendig.

Kerli hat geschrieben:
Dirty Oerti hat geschrieben:Filestreams: Wo denn? Ich möcht ja versuchen das ganze möglichst optimiert ablaufen zu lassen. :)
Hier zum Beipiels:

Code: Alles auswählen

short CreateResourceFile(packmf2 *Packarray, int File_Count)
{
        fstream ResFile;
        ResFile.open("ResFile.rf2", ios_base::in | ios_base::out | ios_base::binary | ios_base::trunc );
        // ....
Du öffnest die Datei zum Lesen und Schreiben, obwohl du nachher nur in die Datei hineinschreibst. Bist du dir eigentlich sicher, dass du an der Stelle, wenn eine Datei mit dem gleichen Namen schon existiert die neuen Daten anhängen willst und nicht die vorhandene Datei einfach überschreiben willst.
Ah, danke.
Das ist noch ein Überbleibsel aus einem anderen Verfahren, die Datei zu erstellen.
Dort musste ich auch lesen. (hin und her springen in der Datei. Es wurde also nicht zuerst der Header komplett geschrieben und dann die Dateien, sondern immer nur Teile vom Header)

Hä?
Also was der Code macht ist die vorhandene Datei überschreiben, und das ist auch das, was ich gewollt habe.

MfG
Daniel
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Antworten