Mein betagter XP Rechner (200 GB SATA Platten) kommt auf etwa 55 MB / Sekunde (Schreiben auf lokale Festplatte).
Auf dem Neuen (1TB SATA Platte) sogar 125 MByte / Sekunde (Schreiben auf lokale Festplatte).
Möglich, dass auf einem neuen Rechner auch größere Blocks eine Beschleunigung bringen, im Netzwerk auf keinen Fall.
Code: Alles auswählen
#include "fileio.ch"
procedure main
local cFileName := "verybig.txt"
local nSizeExPl := 4154687701
local cSizeExPl := " 4.154.687.701"
local nZiel, nBytes, x, nBytesToWrite, nWrittenBytes
local nDauer
cls
delete file (cFileName) // sicher ist sicher
nBytes := 4096
cBuffer := replicate("A",nBytes)
nBytesToWrite := nSizeExPl
nWrittenBytes := 0
?
? "Make VeryBig.TXT"
? cFileName
? "Gewünschte Größe: ", transform(nSizeExPl,"999,999,999,999"), " (numerisch)"
? "Gewünschte Größe: ", cSizeExPl, " (string)"
? "Startzeit: ", time()
?
nDauer := seconds()
nZiel := FCreate( cFileName, FC_NORMAL )
IF nZiel == -1
? "Fehler beim Erzeugen der Datei:", FError()
ELSE
x := 1
do while nBytesToWrite > 0
if x > 100
@ row(), 0 say "Geschriebene Bytes: "+transform(nWrittenBytes, "999,999,999,999")
x := 1
else
x++
endif
if nBytesToWrite < nBytes // nicht mehr schreiben als gewünscht
nBytes := nBytesToWrite
endif
nBytes := FWrite(nZiel, @cBuffer, nBytes)
nBytesToWrite -= nBytes
nWrittenBytes += nBytes
if FError() > 0
? "SCHREIBEN - FError() = ",FError()
exit
endif
enddo
ENDIF
FClose( nZiel )
nDauer := seconds() - nDauer
? "Ende mit Close: ", time()
? "Ergebnis:"
? "Gewünschte Größe: ", transform(nSizeExPl,"999,999,999,999"), " (numerisch)"
? "Gewünschte Größe: ", cSizeExPl, " (string)"
? "Geschriebene Bytes: ", transform(nWrittenBytes,"999,999,999,999"), " (gezählt)"
? "Tatsächliche Größe: ", transform(FSize(cFileName),"999,999,999,999"), " (FSize())"
? "Dauer: ", ntrim(int(nDauer/60)) , "Minuten", ntrim(nDauer % 60) , "Sekunden. Geschwindigkeit: ",alltrim(transform(nWrittenBytes/1024/nDauer,"999,999")),"MByte/Sekunde"
wait
return
*----------------------------------------------------
function ntrim(n)
return alltrim(str(n))