Sowas wie MemoryFiles?



  • Schönen guten Tag,

    und zwar es gibt zwar eine Möglichkeit über CreateFile() eine Datei zu erstellen die ich Speicher verwlatet wird (ich bekomme dabei ein FILE HANDLE).

    Nun ja, schön und gut ich bräuchte jedoch eine Möglichkeit, dass (egal welche API) auf die Datei c:\\myfile.bmp zugreift -> Sozusagen eine Weiterleitung auf eine Datei im Speicher gemacht wird.

    Ich benutze eine API(DLL), welche ein char* für eine Datei verlangt, das passiert pro Sekunde mehrere hundert mal.
    Ein Hardware-Zugriff sieht jeder ist dafür sehr unangenehm.

    Gibt es dafür eine Möglichkeit



  • Vieleicht suchst du ja das hier:

    CreateFileMapping



  • Die Funktion ist mir bereits bekannt! Das Problem ist, dass ein anderes Programm eine Datei öffnet (die kann ICH! festlegen).

    Ich gehe mal von aus, dass das andere Programm die Datei mit CreateFile() öffnet. Das System muss automatisch erkennen, dass es eine Memory-Datei ist und entsprechend laden.

    Notfalls würde ich die CreateFile() Datei hooken, das wäre aber aufwendiger.



  • Wenn die Zugriffe nur lesend erfolgen dann gibt's da eh keine Hardware-Zugriffe mehr, da wird sowieso alles gecachet.
    Wenn die Zugriffe auch schreibend erfolgen brauchst du eine RAMDISK.
    Eine andere Möglichkeit wäre mir unter Windows nicht bekannt, wenn man nicht gleich einen File System Treiber schreiben möchte (und das ist ein RIESEN Aufwand).
    p.S.: ja, CreateFile hooken. Geht theoretisch, wünsche viel Spass damit. Da würde ich noch eher mit einer RAMDISK arbeiten, sollte *wesentlich* einfacher sein.



  • Die Dateien werden jede Sekunde neu beschrieben (erstellt). Danke für den Tipp - das mit der Ram-disk sollte genau mein Problem lösen.

    Besten Dank, werde das mal ausprobieren!!



  • Also .... Kleine Frage - gibt es irgendwelche Probleme bei Windows XP (32bit) mit Ram-Disk?

    Hab alles installiert und er zeigt mir auch das Laufwerk an - nur..... Ich kann nicht drauf zugreifen? 0 Bytes ist das Laufwerk groß?

    😡 😡



  • WELCHE RamDisk?
    Gibt viele? Meinst du das DDK Demo von MS? Versuch mal einfach eine der anderen Versionen...

    Und ja, Datei jedesmal erstellen ist natürlich blöd, da wird FS-Metadata geschrieben, und FS-Metadata wird irgendwann geflusht - das bremst dann schon merklich.



  • Hm, hab ich denn Hoffnung auf einen Geschwindigkeitsvorteil im Gegensatz zu Hardware?

    So hab vermutlich das Problem gefunden. Ich benutze die RAM-DISK von MS. So und das ist nur erlaubt mit einer FAT32 FEstplatte. NTFS wird standardmäßig nicht unterstützt.

    MAn kann den Source mit NTFS neu kompilieren..... GIBT ES NICHT SCHON WAS KOMPILIERTES?? 🙄 😡



  • Wenn es um FS-Metadata Operationen geht (files anlegen, löschen, umbenennen, verschieben, vergrössern, ...) dann wird der Unterschied wohl gewaltig sein!
    Vonwegen NTFS vs. FAT32: nimm doch einfach FAT32 - bei einer RAMDISK ist das ziemlich egal - die ist nach dem Ausschalten sowieso weg, da hilft die "bessere Sicherheit" von NTFS garnix. Und du wirst wohl auch nicht sehr viele Files da drauf anlegen, oder?

    Ansonsten... guck mal ob du nicht was anderes brauchbares findest. z.B: sowas: http://users.compaqnet.be/cn021945/RAMDisk/ramdiskent.htm

    Die meisten sind zwar nicht gratis, haben aber eine (meist time-limited) Demo mit der du erstmal probieren könntest ob's denn geht. Und die Preise sind z.T. sehr niedrig, angefangen bei 8$ bis 40$+ (je nach Produkt).


Anmelden zum Antworten