Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Verständnis der MSDN

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.11.2004, 12:03 Uhr
Mr. T



Hallo, ich gehe nochmal die MSDN durch, und verstehe was nich so sauber.

Da steht:

Return Values
Nonzero indicates success. Zero indicates failure. To get extended error information, call GetLastError.

The ReadFile function returns when one of the following is true: the number of bytes requested has been read or an error occurs.

If the return value is nonzero and the number of bytes read is zero, the file pointer was beyond the current end of the file at the time of the read operation.

Also, Rückgabewert ungleich null, wenn erfolgreich.
Dann steht da aber:


Code:

// Attempt a synchronous read operation.
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL) ;
// Check for end of file.
if (bResult &&  nBytesRead == 0, )
{
    // we're at the end of the file
}



Das widerspricht sich doch, oder? wenn beide null sind, wurde doch garnichts gelesen (nonzero für bResult und nBytesRead heisst doch nicht erfolgreich gelesen und keine Bytes gelesen ODER?)
--
So ist das!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.11.2004, 12:17 Uhr
Tommix



Hallo,
mal davon ab, daß das Komma (im MSDN) zuviel ist, bedeutet die Abfrage

C++:
if ((bResult) && (nBytesRead == 0))
{
...


, was identisch mit

C++:
if ((bResult != 0) && (nBytesRead == 0))
{
...


ist.

Gruß, Tommix

Dieser Post wurde am 09.11.2004 um 12:18 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.11.2004, 13:07 Uhr
Mr. T



Das Komma kommt echt zu viel - war aber aus der MSDN 1:1 rauskopiert.

Eben! Mit der UND Verknüpfung wäre doch auch bResult = 0 und nBytesRead = 7 als true gültig, da 0 UND verknüpft mit 7 auch 0 gibt!
Das ist doch dann nicht zwangsläufig end of file.

Oder Wäre dann eine Readfile(...) in einer for(;;) Schleife nicht richtig?


Code:


for(int i=0;i<10;i++)//z.B. abbrechen nach max. 10 mal z.B. 7 Zeichen lesen
{
//etwas tun, lesen starten
bResult = ReadFile(...); //zehn Zeichen einlesen
//etwas tun, gelesenes speichern
}




Denn ein end of file erkennt man doch nur durch ein signifikantes Zeichen, und nicht durch ein einfaches scheitern des lesevorganges (bResult = 0 und nBytesRead = 0)?!

Oder?!
--
So ist das!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.11.2004, 13:31 Uhr
Tommix




Zitat von Mr. T:
Mit der UND Verknüpfung wäre doch auch bResult = 0 und nBytesRead = 7 als true gültig, da 0 UND verknüpft mit 7 auch 0 gibt!


0 == FALSE;

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.11.2004, 13:47 Uhr
~Mr. T
Gast



Zitat von Tommix:
[quote Mr. T]Mit der UND Verknüpfung wäre doch auch bResult = 0 und nBytesRead = 7 als true gültig, da 0 UND verknüpft mit 7 auch 0 gibt!


0 == FALSE;

- Tommix[/quote]

JA NATÜRLICH! == false

Aber da ist ja ein vergleich mit 0 --> wenn das && ergebnis false ist (stimmt ja soweit) ist der vergleich somit true! So war das gemeint (ein Schritt weiter).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
09.11.2004, 13:58 Uhr
Tommix



Aber nein doch:

C++:
int keinFehlerTratAuf = (bResult != 0);
int nixGelesen = (nBytesRead == 0);

if (keinFehlerTratAuf && nixGelesen)
{
  // Wir sind ohne Fehler ans Dateiende gelangt.
}


Das == 0 gehört nur zu dem nBytesRead (Vorrangregeln!), deswegen hatte ich in meinem ersten Post zur Verdeutlichung Klammern gesetzt.

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
09.11.2004, 14:11 Uhr
~Mr. T
Gast



Zitat von Tommix:

(Vorrangregeln!)


Aber klar doch! Wieso sagst Du das denn nicht gleich!?

Ich Depp!

Danke! Alles klar!

Hehe, scheiße...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: