Datei erzeugen und daten schreiben mit WriteFile



  • Hallo zusammen,

    ich habe ein Programm geschrieben das mir eine Datei erzeugt und Daten rein schreiben soll.

    Das erzeugen der Datei Funktioniert, jedoch das Schreiben nicht.

    hier ist der Code:

    int WINAPI WinMain(	HINSTANCE hInstance,
    					HINSTANCE hPrevInstance,
    					LPTSTR    lpCmdLine,
    					int       nCmdShow)
    {
    
    	char Buffer[]="hello";
    	LPDWORD lpNumberOfBytesWritten;
    
    	// TODO: Place code here.
    	HANDLE hFile= CreateFile(	TEXT("test.txt"),
    								GENERIC_READ|GENERIC_WRITE,
    								0,
    								NULL,
    								OPEN_ALWAYS,
    								FILE_ATTRIBUTE_NORMAL,
    								NULL);
    	if (!hFile)
    		printf("Fehler beim erzeugen der Datei");
    
    	if(!WriteFile(	hFile,
    					(LPCVOID) Buffer[0],
    					5,
    					lpNumberOfBytesWritten,
    					NULL
    					))
    	{
    		printf("Fehler beim schreiben in die Datei");
    	}
    
    	if(!CloseHandle(hFile))
    	{
    		printf("Fehler beim schließen der Datei");
    	}
    
    	Sleep(1000);
    	return 0;
    }
    

    WriteFile gibt 0 zurück also Fehler, wer weis wie ich es richtig mache.

    Gruß
    spacehelix



  • If the function fails, the return value is zero. To get extended error information, call GetLastError.



  • LPDWORD lpNumberOfBytesWritten = new DWORD;



  • Mit GetLastError(), habe ich es versucht, doch leider ist dann mein Programm beim debuggen abgeschmiert.



  • LPDWORD lpNumberOfBytesWritten=new DWORD;

    hilft auch nicht.

    Gruß
    spacehelix



  • Jetzt Funktioniert es,

    hier ist der Code zur Info wie es geht:

    int WINAPI WinMain(	HINSTANCE hInstance,
    					HINSTANCE hPrevInstance,
    					LPTSTR    lpCmdLine,
    					int       nCmdShow)
    {
    
    	char Buffer[]="hello";
    	LPDWORD lpNumberOfBytesWritten=new DWORD; 
    	HANDLE hFile=0;
    
    	// TODO: Place code here.
    	hFile= CreateFile(	TEXT("\\ffsdisk/test.txt"),
    						GENERIC_READ|GENERIC_WRITE,
    						0,
    						NULL,
    						OPEN_ALWAYS,
    						FILE_ATTRIBUTE_NORMAL,
    						NULL);
    	if (!hFile)
    		printf("Fehler beim erzeugen der Datei");
    
    	if(!WriteFile(	hFile,
    					(LPCVOID) Buffer,
    					5,
    					lpNumberOfBytesWritten,
    					NULL
    					))
    	{
    		printf("Fehler beim schreiben in die Datei");
    	}
    
    	if(!CloseHandle(hFile))
    	{
    		printf("Fehler beim schließen der Datei");
    	}
    
    	Sleep(1000);
    	return 0;
    }
    

    Es darf nicht "(LPCVOID) Buffer[0]", sondern muss "(LPCVOID) Buffer" heißen.

    danke für eure hilfe



  • Versuch mal:

    int WINAPI WinMain(	HINSTANCE hInstance,
    					HINSTANCE hPrevInstance,
    					LPTSTR    lpCmdLine,
    					int       nCmdShow)
    {
    
    	char szBuffer[] = "hello";
    	DWORD dwNumberOfBytesWritten;
    
    	// TODO: Place code here.
    	HANDLE hFile= CreateFile(	TEXT("test.txt"),
    								GENERIC_READ|GENERIC_WRITE,
    								0,
    								NULL,
    								OPEN_ALWAYS,
    								FILE_ATTRIBUTE_NORMAL,
    								NULL);
    	if (!hFile)
    		printf("Fehler beim erzeugen der Datei");
    
    	if(!WriteFile(	hFile,
    					szBuffer,
    					5,
    					&dwNumberOfBytesWritten,
    					NULL
    					))
    	{
    		printf("Fehler beim schreiben in die Datei");
    	}
    
    	if(!CloseHandle(hFile))
    	{
    		printf("Fehler beim schließen der Datei");
    	}
    
    	Sleep(1000);
    	return 0;
    }
    


  • normalerweise macht man aber

    DWORD numberOfBytesWritten;

    und dann bei WriteFile &numberOfBytesWritten 😉



  • der normalo schrieb:

    normalerweise macht man aber

    DWORD numberOfBytesWritten;

    und dann bei WriteFile &numberOfBytesWritten 😉

    Jupp, eben 😉 .



  • Oh man bin ich dumm. 😃 Ich werde mich nochmal mit den Grundlagen beschäftigen bevor ich mit Winapi weitermache.

    Gruß
    spacehelix


Anmelden zum Antworten