Créer un fichier de taille x, très rapidement

Soyez le premier à donner votre avis sur cette source.

Vue 8 699 fois - Téléchargée 422 fois

Description

Bonjour,

Suite a une demande du Forum, je met a dispo une source qui m'est souvent utile.
Elle permet de créer facilement et rapidement des fichiers de taille arbitraire.

Je m'en sert par exemple lorsque j'ai besoin de calculer la taille d'un fichier, et que cette taille ne tient pas sur un Long...

Source / Exemple :


Private Const CREATE_ALWAYS As Long = 2
Private Const FILE_BEGIN As Long = 0
Private Const GENERIC_WRITE As Long = &H40000000

Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function CreateFile Lib "kernel32.dll" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByRef lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function SetEndOfFile Lib "kernel32.dll" (ByVal hFile As Long) As Long
Private Declare Function SetFilePointer Lib "kernel32.dll" (ByVal hFile As Long, ByVal lDistanceToMove As Long, ByRef lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long

Public Function CreateBigFile(ByRef vsFileName As String, ByVal vnSize As Variant) As Boolean
Dim hFile As Long
Dim nHigh As Long
Dim nLow As Long
Dim nTmp As Long
Const hFFFFFFFF = 4294967295#
Const h80000000 = 2147483648#
    hFile = CreateFile(vsFileName, GENERIC_WRITE, 0, ByVal 0&, CREATE_ALWAYS, 0, 0)
    If hFile <> -1 Then
        If CCur(vnSize) > hFFFFFFFF Then
            nHigh = Fix(vnSize / hFFFFFFFF)
            vnSize = vnSize - CCur(hFFFFFFFF * nHigh)
        End If

        If CCur(vnSize) > h80000000 Then
            nTmp = Fix(vnSize / h80000000)
            nLow = vnSize - h80000000 * nTmp

            nLow = nLow + nTmp * &H80000000
        Else
            nLow = CLng(vnSize)
        End If
    
        SetFilePointer hFile, nLow, nHigh, FILE_BEGIN
        SetEndOfFile hFile

        CreateBigFile = True
        CloseHandle hFile
    End If
End Function

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Erudix Messages postés 20 Date d'inscription jeudi 8 septembre 2011 Statut Membre Dernière intervention 30 juillet 2012 3
25 juin 2012 à 15:47
Le problème vient du format du disque apparemment, formatez en NTFS et vous n'aurez plus ce problème.
Erudix Messages postés 20 Date d'inscription jeudi 8 septembre 2011 Statut Membre Dernière intervention 30 juillet 2012 3
24 juin 2012 à 18:38
Pour info j'utilise ce code avec VS2010 et je l'ai convertit en .net
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 75
24 juin 2012 à 18:26
Sans cette instruction, le fichier ne sera pas fermé.
On ne sera pas sur que le fichier sera effectivement ecrit.

VB6 sur 64 bits est une chose assez sensible...
Erudix Messages postés 20 Date d'inscription jeudi 8 septembre 2011 Statut Membre Dernière intervention 30 juillet 2012 3
24 juin 2012 à 12:56
possible, je suis sous Windows 7 64bit et le programme ne peut plus se fermer (même avec le gestionnaire des tâches)et fait complètement bugger Windows. Même après avoir fermé VS, le .vshost continue de tourner pendant 5 min.
C'est gênant si on supprime CloseHandle hFile ??
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 75
24 juin 2012 à 10:51
Etrange, lié a l'OS ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.