[R] Creer un gros fichier le + vite possible

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

[R] Creer un gros fichier le + vite possible

#1

Message 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.
Modifié en dernier par DimVar le lun. 14 mars 2011 20:00, modifié 1 fois.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#2

Message 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)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

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

#3

Message 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 ?
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#4

Message 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)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

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

#5

Message par DimVar »

Excellent !

Merci.

Je clos.
Modifié en dernier par DimVar le jeu. 15 janv. 2015 09:44, modifié 2 fois.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

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

#6

Message 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.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#7

Message 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. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

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

#8

Message par DimVar »

Impec !

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

Je clos.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Répondre