Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   C++ WriteFile und Festplatte voll (https://www.delphipraxis.net/92533-writefile-und-festplatte-voll.html)

Dezipaitor 21. Mai 2007 22:53


WriteFile und Festplatte voll
 
hi

ich habe mal eine Frage zu WriteFile mit einer Datei.
Was passiert wenn die Festplatte/Quota voll ist?

Sagen wir, ich habe einen Block von 100kb den ich WriteFile übergebe.
Nehmen wir an, ein Cluster hat 32kb und wir haben noch drei Cluster übrig. D.h. 96kb können noch auf die Platte geschrieben werden.
Für die restlichen 4 Kb gibt es aber kein Platz mehr. Was macht WriteFile ?

1. Es erkennt schon vorher den Platzmangel, schreibt nix und meldet einen Fehler
2. Es schreibt einfach alles was es gibt, liefert aber einen Fehler und meldet 96Kb geschrieben
3. Es schreibt einfach alles was es gibt, liefert aber KEINEN Fehler und meldet 96Kb geschrieben
4. ????

Hat da jemand eine Idee? Aus der MSDN werd ich net wirklich schlau.

THX

Luckie 21. Mai 2007 23:02

Re: WriteFile und Festplatte voll
 
Zum einem steht im Parameter lpNumberOfBytesWritten wie viel Byte geschrieben werden konnten und zum anderem:
Zitat:

If the function fails, the return value is zero. To get extended error information, call GetLastError
GetLastError sollte dann also einen Fehlercode ausgeben wie:
ERROR_WRITE_FAULT 29 oder ERROR_NOT_ENOUGH_MEMORY 8 oder so was. Probier es doch einfach aus. Kannst ja eine Diskette zum Testen nehmen.

Dezipaitor 22. Mai 2007 10:29

Re: WriteFile und Festplatte voll
 
irgendwie wollte ich das Testen vermeiden,
da ich es ja in den unterschiedlichsten Umgebungen machen müsste (Win98 bis WinVista)

Auf zur Arbeit.

Bernhard Geyer 22. Mai 2007 10:35

Re: WriteFile und Festplatte voll
 
Zitat:

Zitat von Dezipaitor
irgendwie wollte ich das Testen vermeiden,
da ich es ja in den unterschiedlichsten Umgebungen machen müsste (Win98 bis WinVista)

Läst sich nicht vermeiden da sich jede Windows-Version anders verhalten (kann).

SirThornberry 22. Mai 2007 10:36

Re: WriteFile und Festplatte voll
 
anstelle der Verwendung eine Diskette kann man auch einfach das Kontingent eines Users festlegen.

Dezipaitor 22. Mai 2007 11:44

Re: WriteFile und Festplatte voll
 
Zitat:

Zitat von SirThornberry
anstelle der Verwendung eine Diskette kann man auch einfach das Kontingent eines Users festlegen.

wobei das nur ein zusätzlicher Testfall wäre.

shmia 22. Mai 2007 18:05

Re: WriteFile und Festplatte voll
 
Der Fall 2. scheint mir richtig zu sein.
Zitat:

When writing to a nonblocking, byte-mode pipe handle with insufficient buffer space, WriteFile returns TRUE with *lpNumberOfBytesWritten < nNumberOfBytesToWrite.
Dies dürfte dann nicht nur für Pipes, sondern auch für volle Dateisysteme zutreffen.
Ein Test mit einer Floppydisk (Hey, das sind die eckigen Plastikdinger, die vor 10 Jahren top modern waren) dürfte Klarheit bringen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz