probleme mit virtueller datei erstellung
-
also, ich wollte mir ne klasse basteln, die aus normalen dateien virtuelle macht(einfach aus gründend er geschwindigkeit).
so,da hab ich mich mal drangesetzt, und kam auf folgenden algorithmus:
öffnen der datei
dateigröße bestimmen
einen speicherbereich in größe der Datei erstellen
kopieren der datei in den speicher
schließen der dateidatei öffnen is klar, das kriegt man mit fstream hin.
speicherbereich erstellen ist auch klar,das geht mit malloc.
das problem ist jetzt die bestimmung der dateigröße: die funktion filelength erwartet einen pointer, und ich weis nicht, wie ich an den rankommen soll...desweiteren gibts noch ein weiteres problem: ich wollte gerne später dateien aus einem passwortgeschütztem unkomprimierten zip archiv holen,und ich weis da auch wieder nich, wie ich das anstellen soll.
bei der sache mit dem zip archiv wär ich über ne internet seite dankbar, die das erklärt, da es bestimmt nich ganz so einfach ist..
-
Schau die mal in der FAQ Dateien und Ströme an.
Devil
-
huhu, die streams waren nicht mein problem, und da ich diese faq schon mehrere male davor gelesen hab, weis ich, dass es da nich um die handles geht die ich brauch,bzw um die erklärung zur öffnung von zip archiven

-
Hallo,
es gibt keine wirklich gute Methode in Standard-C++ die Dateigröße einer Datei zu bestimmen (im FAQ-Beitrag ist eine mehr oder weniger brauchbare beschrieben. Dein BS hat aber definitiv bessere Funktionen) und Zip-Archive kennt der Standard schon gar nicht. Dafür gibt es extra Bibliotheken, wie z.B. die zlib.Unter welchem BS soll deine Klasse arbeiten?
-
da ich im programm directx benutze, wirds wohl Windows sein

//edit und wo findet man denn ein tut in dem man lernt mit der zlib umzugehen?
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Winapi?
GetFileSize
-
Zum Lesen von Zip-Files gibt's hier ein Tutorial:
http://www.scherfgen-software.net/index.php?action=tutorials&topic=zip
-
hmm, das sieht schonmal gut aus,aber ich brauchd afür nen handle,wie kann ich an den kommen?hab sogut wie keinen peil von der winapi

-
Was meinst du? Hast du dir das mal alles durchgelesen? Evtl. solltest du mit etwas einfacherem anfangen

-
ich meinte nich dein zip archiv, das hab ich gerafft, ich weis nur nich, wie ich bei getfilesize an den Handle der datei komme...
//edit willder nen einfachen zeiger, oder was ist handle für ein typ?
-
Ein File-Handle ist vom Typ HANDLE.
-
Das ist sinnlos, weil es sowieso von Windows ausgelagert wird. Du müsstest ein festes, also weder verschiebbares noch überschreibbares(löschbares), Speicherobjekt erstellen. Das geht mit Local- oder GlobalAlloc möglicherweise sind diese Funktionen aber schon etwas alt. "Neu" im Bunde ist hier VirtualAlloc. Wobei ich diese Funktion nicht kenne.
-
[ot]
daniel schumann kenn ich dich nicht? warste mal in Essen aufm CHG?
[/ot]aber wars nich sinn von malloc, dass ein bestimmter speicherbereich sozusagen gesperrt wird?
malloc schreibt aufm heap,wenn malloc also nicht funktionieren würde, würde der new/delete operator auch fehlschlagen!@web fritzi was eine aussage!
was ist handle für ein typ?
Ein File-Handle ist vom Typ HANDLE.
Handle ist ein typedef fürn andren typ, wenn ich den ursprungstyp kenne,weis ich, was genau gemeint ist, und kann dann im zweifesfall nen cast machen

//edit hab ne lösung ohne die lästige winapi:
fstream datei("datei.xxx",ios::in|ios::binary); datei.seekp(0L,ios::end);//wir benutzen den schreibzeiger um die dateilänge zu bestimmen,der lesezeiger belibt unangetastet unsigned long y=datei.tellg(); void* SpeicherZeiger=malloc(y); char* Vdatei=(char*)SpeicherZeiger; datei.read(Vdatei,y);// datei.close();is sicher noch keine perfekte lösung, der pointer cast nervt mich gewaltig, aber wenigstens keine winapi

-
Wenn Du die WinAPI so lästig findest, warum programmierst Du dann Windows-Anwendungen?
-
weil directx das ist mit dem ich arbeite,dafür brauch man normalerweise keine WinAPI(ausser dem Fenster öffnen natürlich).
wenn du wissen willst was mich an der WinAPI nervt:typefed void *PVOID; typedef PVOID HANDLE; typedef HANDLE *PHANDLE;Kopf->Wand
typedefs sind was schönes,solange man sie nich für jeden schrott benutzt.
mir persönlich ist ein void** lieber als ein PHANDLE.
-
otze schrieb:
daniel schumann kenn ich dich nicht? warste mal in Essen aufm CHG?
Nicht das ich wüßte. Ich war eigentlich noch nie in Essen und CHG sagt mir auch nichts.