Page 1 sur 1

[R] Creer un gros fichier le + vite possible

Posté : lun. 07 mars 2011 21:41
par DimVar
Bonjour,


Je cherche le moyen de creer un fichier le plus gros possible et le plus vite possible.
Auriez vous une idee de l'algo utilisé ?

je pensais à un truc du genre :

Code : Tout sélectionner

$2 = 2
$1 = fileopen ($file,1)
while 1
$2 = $2 * $2
filewrite ($1, $2)
wend
 

Merci de votre aide.


Dimvar.

Re: [..] Creer un gros fichier le + vite possible

Posté : mar. 08 mars 2011 00:34
par Tlem
Je pense que ceci devrait être pas mal :

Code : Tout sélectionner

#include <Constants.au3>

Local Const $sFile = "test.txt"
Local $hFile = FileOpen($sFile, 2)
Local $x = 3  ;  <============================== Nombre de Go souhaité

If $hFile = -1 Then
    MsgBox(0, "Erreur", "Impossible de créer le fichier.")
    Exit
EndIf

FileSetPos($hFile, (1024*1024*1024*$x)-1, $FILE_BEGIN)
FileWrite($hFile, 0)

FileClose($hFile)

Re: [..] Creer un gros fichier le + vite possible

Posté : mar. 08 mars 2011 19:52
par DimVar
D'abord merci pour le code.
Ensuite, ....J'ai rien compris !
Je vois bien que c'est la fonction FileSetPos qui détermine la taille du fichier, mais pkoi la définition d'une position dans un fichier fait elle augmenter sa taille ????? :?

Ça doit surement faire appel à une notion que je ne connais pas.

Merci.

Dimvar.

[EDIT] Un fichier de 200 go ne peut etre créé semble il, limitation ntfs ?

Re: [..] Creer un gros fichier le + vite possible

Posté : mar. 08 mars 2011 23:51
par Tlem
Pour essayer de 'résumer' la commande FileSetPos, je vais la comparée à un ascenseur de fenêtre. Vous pouvez bouger l'ascenseur avec la flèche haut ou bas en faisant plusieurs clics, ou alors, vous prenez le curseur avec la souris et vous le placez là ou bon vous semble.
La fenêtre associée affichera alors la zone déterminée par la position du curseur.
Hé bien là, c'est presque pareil. Vous déterminez une position de départ en créant le fichier avec FileOpen puis vous déplacez le pointeur de l'offset (curseur) et vous validez en enregistrant le fichier avec FileWrite, le fichier sera donc composé de l'écart entre la position 0 et la position déterminée par l'argument offset. ;)

En ce qui concerne la limitation de 200Go, je ne saurait vous répondre.
Mais 200Go c'est déjà un sacré gros fichier. ^^
Si il vous en faut plus, créez plusieurs fichiers. 8)

Re: [..] Creer un gros fichier le + vite possible

Posté : mer. 09 mars 2011 20:45
par DimVar
Excellent !

Merci.

Je clos.

Re: [..] Creer un gros fichier le + vite possible

Posté : mer. 09 mars 2011 21:23
par DimVar
En relisant votre reponse, je me demande si le fichier sera rempli de "0" (filewrite) ou si le "0" signifie autre chose ?
Et aussi, pourquoi le "-1" dans le 2e param de filesetpos ?

Merci.

Re: [..] Creer un gros fichier le + vite possible

Posté : jeu. 10 mars 2011 01:01
par Tlem
C'est bien d'être curieux, ça nous permet d'apprendre plus de chose. :)

Alors en éditant le fichier avec un éditeur hexadécimal, je vous confirme qu'il est 'remplit de zéro' (hex(00)) mais qui correspondent au caractère NUL.
Le FileWrite($hFile, 0) après le FileSetPos permet de rajouter le nombre 0 (hex(32)) à la fin du fichier.
Cela pourrait être n'importe quel caractère autre que le caractère NUL, car pour valider le déplacement de l'offset, il faut autre chose qu'un caractère NUL.
En ce qui concerne le remplissage par Hex(00), cela ne change rien au fait que le fichier contient quand même quelque chose, car même si vous y mettez que des Hex(32), le fichier aura la même taille. ^^

En ce qui concerne le -1, vous pouvez en faire abstraction.
Mais pour votre connaissance, le but était de faire en sorte que la valeur de la taille du fichier corresponde à un multiple de 1024. :roll:

Prenons pour exemple ce code :

Code : Tout sélectionner

FileSetPos($hFile, (1024*1024), $FILE_BEGIN)
FileWrite($hFile, 0)
Je vais me retrouver avec un fichier ayant pour taille 1024*1024+1=1 048 577 (le 1 correspond au caractère 0 que je rajoute à la fin ;) ).
Or en informatique c'est 1 048 576 qui est un multiple de 1024.
Voici ce qu'en dit le Wikipédia :
1 048 576 octets valent un mébioctet (1 Mio) ou 1 MiB.
Ce nombre est lié à la mémoire adressable en mode réel segmenté d'un PC tournant sous MS-DOS, qui possédait au final un bus d'adresse 20 bits (4 bits de segment et 16 bits d'offset).

En binaire, ce nombre s'écrit 100000000000000000000, et en hexadécimal 100000.
Voilà, j'espère cette fois-ci que vous avez tous les éléments. ;)

Re: [..] Creer un gros fichier le + vite possible

Posté : lun. 14 mars 2011 20:00
par DimVar
Impec !

Merci d'avoir pris le temps de me rediger ca. 8)
Clair et net.

Je clos.