Aus dem Speicher auf die Platte schreiben?



  • Hallo Forum,

    ich haben diesen Source gefunden der für mein Problem funktioniert. Momentan ist er in einer externC Fkt gekapselt:

    fhandle = _open(sFilename , _O_CREAT | _O_BINARY | _O_RDWR );
    _write(fhandle, data, 20);
    _close(fhandle);
    

    1. Warum sind die Underscores vor dem Write? Von den Parametern her ist es das normale write?

    2. Wie kann ich den Source nach C++ konvertieren? Im Internet finde ich für "Datei schreiben" Beispiele wie dieses hier:

    fstream oOutPutFile( ios::out);
    oOutPutFile << "aa" << 3;
    

    Aber wie kann ich aus dem Speicher heraus auf die Platte schreiben?

    Vielen Dank



  • Hallo

    Das mit den _ sind Funktionen und Konstanten aus der WinAPI.

    Du solltest besser das zweite Beispiel benutzen.

    #include <fstream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
      fstream oOutPutFile( ios::out);
      int zahl = 3;
      string text = "aa";
      oOutPutFile << text << zahl;
    }
    

    bis bald
    akari



  • Hallo Akari,

    ich möchte dieses Bsp nach C++ uebersetzen. LockResource() scheint die Ressource aus dem RessourcenFile zu sperren: http://support.microsoft.com/kb/124947/de
    Ich weiß nicht genau warum ich die sperren soll, ich bekomme jedenfalls einen Pointer auf die besagte Ressource und kann dann mit write auf die Platte schreiben. Gibt es unter C++ etwas aehnliches zu write? Wenn ich << data << mache schreibt er mir nur die Adresse von *data raus.

    This functions writes an attached ressource to a file:
    RES::WriteResToFile(int lResourceHandle, string sFilename) {
    
    	HRSRC zfile = FindResourceA(GetModuleHandle(0), MAKEINTRESOURCE(lResourceHandle), sBinResType);
    	if (zfile) { // Res found:
    		HGLOBAL zload = LoadResource(GetModuleHandle(0), zfile);
    		void *data = LockResource(zload); // The LockResource function locks the specified resource in memory
    		size_t sz = SizeofResource(GetModuleHandle(0), zfile); //returns size in bytes
    
    /*
        fstream f;
        f.open("d:\\test.dat", ios::out);
        f << data; // This writes only the pointer to disk.
        f.close();
    */
    		int fhandle;
    		fhandle = _open(sFilename.c_str() , _O_CREAT | _O_BINARY | _O_RDWR );
    		if (fhandle!=HFILE_ERROR) { // File is open:
    			_write( fhandle, data, sz);
    			_close( fhandle );
    		}
    	}
    }
    


  • WurzelD schrieb:

    Gibt es unter C++ etwas aehnliches zu write?

    Ja - write() (wer hätte das gedacht :D)

    fstream file(sFilename.c_str();
    if(file)
      file.write(data,sz);//kann auch sein, daß du die Parameter vertauschen mußt
    


  • Oehm ja. 🙂



  • ..sorry für diesen Einwurf, aber warum werden Umlaute bei manchen Usern falsch dargestellt ?



  • @mikey: Aus WurzelD's letztem Thread:

    WurzelD schrieb:

    @Konrad: Ich schreibe über einen Proxy (www.proxy.org). Dieser scheint die Umlaute zu verfaelschen.


Anmelden zum Antworten