IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

TFileStream et les fichiers de plus de 2Go


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 17
    Points : 18
    Points
    18
    Par défaut TFileStream et les fichiers de plus de 2Go
    Bonjour,

    J'ai un programme qui manipule des (enormes) fichiers et pour cela, j'utilise la classe TFileStream. Le problème est que mes fichiers font, pour certains, plus de 2Go.

    Or, le l'attribut de position de TFileStrem est un int , soit un signed long int, soit au maximum 2^31 (soit 2Go)

    Sachant que Microsoft a prévu une taille maxi de 4Go en Fat32 et beaucoup plus en NTFS, j'aimerai bien pouvoir au moins manipuler des fichiers jusqu'a 4Go, par exemple avec un pointeur qui soit un UNSIGNED long int.
    J'ai bien été voir des fonctions style fseek directement issues de Microsoft, mais la, stupeur, le parametre est un ... signed short int

    Quelqu'un connaitrait vous un moyen de manipuler de tels fichiers, soit avec une classe, soit avec un composant, soit avec des manipulateurs de plus bas niveau, genre fonctions C ?
    Merci d'avance pour votre aide

    naikon

  2. #2
    Membre averti
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Points : 369
    Points
    369
    Par défaut
    Oui dans C++Builder ya le système FileOpen/FileSeek/FileRead, FileSeek travaille avec des __int64.

    Va dans l'aide de Borland pour de plus amples précision, il y a aussi un exemple ;-)

    Bonne chance pour la suite.
    Un historique local pour Visual Studio 2005 et 2008 :
    http://www.codeplex.com/VLH2005

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Tu as aussi toute la famille des API Windows:
    CreateFile(Ex)
    ReadFile(Ex)
    WriteFile(Ex)
    mais surout pour ton problème :

    SetFilePointerEx
    The SetFilePointerEx function moves the file pointer of an open file.

    BOOL SetFilePointerEx(
    HANDLE hFile, // handle to file
    LARGE_INTEGER liDistanceToMove, // bytes to move pointer
    PLARGE_INTEGER lpNewFilePointer, // new file pointer
    DWORD dwMoveMethod // starting point
    );
    Parameters
    hFile
    [in] Handle to the file whose file pointer is to be moved. The file handle must have been created with GENERIC_READ or GENERIC_WRITE access to the file.
    liDistanceToMove
    [in] Specifies the number of bytes to move the file pointer. A positive value moves the pointer forward in the file and a negative value moves the file pointer backward.
    lpNewFilePointer
    [out] Pointer to a variable that receives the new file pointer. If this parameter is NULL, the new file pointer is not returned.
    dwMoveMethod
    [in] Specifies the starting point for the file pointer move. This parameter can be one of the following values. Value Meaning
    FILE_BEGIN The starting point is zero or the beginning of the file. If this flag is specified, then the liDistanceToMove parameter is interpreted as an unsigned value.
    FILE_CURRENT The start point is the current value of the file pointer.
    FILE_END The starting point is the current end-of-file position.


    Return Values
    If the function succeeds, the return value is nonzero.

    If the function fails, the return value is zero. To get extended error information, call GetLastError.


    avec :
    LARGE_INTEGER
    The LARGE_INTEGER structure is used to represent a 64-bit signed integer value.

    Note Your C compiler may support 64-bit integers natively. For example, Microsoft® Visual C++® supports the __int64 sized integer type. For more information, see the documentation included with your C compiler.

    typedef union _LARGE_INTEGER {
    struct {
    DWORD LowPart;
    LONG HighPart;
    };
    LONGLONG QuadPart;
    } LARGE_INTEGER, *PLARGE_INTEGER;
    Members
    LowPart
    Specifies the low-order 32 bits.
    HighPart
    Specifies the high-order 32 bits.
    QuadPart
    Specifies a 64-bit signed integer.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Merci pour vos réponses. Cela marche bien !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Traiter les fichiers de plus de trente jours
    Par PAB/31/SAB dans le forum VBScript
    Réponses: 2
    Dernier message: 08/03/2013, 11h29
  2. Script batch trouver tous les fichiers de plus de X taille
    Par quietman dans le forum Windows Serveur
    Réponses: 7
    Dernier message: 15/02/2011, 08h59
  3. Equivalant TFileStream pour les fichier texte
    Par bubulemaster dans le forum Débuter
    Réponses: 5
    Dernier message: 28/01/2010, 10h46
  4. Supprimer les fichiers Excel plus vieux que 7 jours
    Par jeje00 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/07/2009, 20h05
  5. Réponses: 4
    Dernier message: 13/11/2007, 10h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo