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 :

Ouvrir un fichier qui possède un nom en unicode


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut Ouvrir un fichier qui possède un nom en unicode
    Bonjour,
    Je programme sur Windows Vista et C++ Builder 6.
    Mon problème est que j'essaye d'ouvrir un fichier dont son nom est codé en unicode.
    Si le nom d'un fichier n'est pas codé en unicode, j'utiliserai la méthode OpenFile() qui fonctionne très bien.
    Mais, comme je travaille avec des fichiers en Unicode, je voudrai utiliser la fonction OpenFileW().
    Pour l'instant, je n'ai trouvé que ce programme en Delphi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function FileOpenW(const FileName: WideString; Mode: LongWord): Integer;
    const
    AccessMode: array[0..2] of LongWord = (GENERIC_READ,GENERIC_WRITE,GENERIC_READ or GENERIC_WRITE);
    ShareMode: array[0..4] of LongWord = (0,0,FILE_SHARE_READ,FILE_SHARE_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE);
    begin
    Result := -1;
    if ((Mode and 3) <= fmOpenReadWrite) and (((Mode and $F0) shr 4) <= fmShareDenyNone) then
    Result := Integer(CreateFileW(PWChar(FileName), AccessMode[Mode and 3],ShareMode[(Mode and $F0) shr 4], nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0));
    end;
    Je ne sais pas du tout si ce programme fonctionne et, en plus, je ne connais pas du tout la programmation en delphi.
    Si, par hasard, quelqu'un a déjà utilisé la fonction FileOpenW(), ça pourrait beaucoup m'aider.
    Merci d'avance!

    Dan

  2. #2
    Membre éprouvé
    Inscrit en
    Mars 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 105
    Par défaut
    Bonjour,

    On peut certainement utiliser FileOpen de l'unité SysUtils :
    Ouvre un fichier en utilisant le mode d'accès spécifié.

    Unité

    SysUtils

    Catégorie

    routines de gestion de fichiers

    extern PACKAGE int __fastcall FileOpen(const AnsiString FileName, unsigned Mode);

    Description

    Utilisez FileOpen pour ouvrir un fichier et obtenir un handle de fichier. La valeur du mode d'accès résulte d'un ou logique entre l'une des constantes fmOpen et l'une des constantes fmShare définies dans Constantes de mode d'ouverture de fichier. Si la valeur renvoyée est supérieure ou égale à 0, la fonction s'est bien déroulée et la valeur représente le handle du fichier ouvert. Si la valeur renvoyée est -1, cela indique qu'une erreur s'est produite.
    ou le plus classique fopen/_wfopen :
    Header File

    stdio.h

    Category

    Input/output Routines

    Prototype

    FILE *fopen(const char *filename, const char *mode);

    FILE *_wfopen(const wchar_t *filename, const wchar_t *mode);

    Description

    Opens a stream.

    fopen opens the file named by filename and associates a stream with it. fopen returns a pointer to be used to identify the stream in subsequent operations.

    The mode string used in calls to fopen is one of the following values:

    Value Description

    r Open for reading only.
    w Create for writing. If a file by that name already exists, it will be overwritten.
    a Append; open for writing at end-of-file or create for writing if the file does not exist.
    r+ Open an existing file for update (reading and writing).
    w+ Create a new file for update (reading and writing). If a file by that name already exists, it will be overwritten.
    a+ Open for append; open (or create if the file does not exist) for update at the end of the file.

    To specify that a given file is being opened or created in text mode append a t to the mode string (rt w+t and so on). Similarly to specify binary mode append a b to the mode string (wb a+b and so on). fopen also allows the t or b to be inserted between the letter and the + character in the mode string; for example rt+ is equivalent to r+t.

    If a t or b is not given in the mode string the mode is governed by the global variable _fmode. If _fmode is set to O_B/INARY files are opened in binary mode. If _fmode is set to O_TEXT they are opened in text mode. These O_... constants are defined in fcntl.h.

    When a file is opened for update, both input and output can be done on the resulting stream; however,

    output cannot be directly followed by input without an intervening fseek or rewind
    input cannot be directly followed by output without an intervening fseek, rewind, or an input that encounters end-of-file

    Return Value

    On successful completion fopen returns a pointer to the newly opened stream. In the event of error it returns NULL.
    Nicolas

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut
    Je me suis trompé dans mon premier post.
    En effet, j'utilise la fonction suivante pour lire des fichiers de type AnsiString :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int __fastcall FileOpen(const AnsiString FileName, unsigned Mode);
    La fonction dont j'aurai vraiment serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int __fastcall FileOpenW(const WideString FileName, unsigned Mode);
    Mais, je vais essayer d'utiliser la fonction que tu m'as donné Nicolas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int _wopen(const wchar_t *path, int access [, unsigned mode]);
    Reste plus qu'à tester !!!

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

Discussions similaires

  1. [Lazarus] Impossible d'ouvrir un fichier qui, pourtant, existe
    Par Jean-Nono dans le forum Lazarus
    Réponses: 2
    Dernier message: 29/09/2009, 18h49
  2. ouvrir un fichier qui n'est pas dans le répertoire de travail
    Par El_bennito dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 25/06/2009, 16h38
  3. des fichiers qui portent les nom des tables
    Par khouja dans le forum Outils
    Réponses: 4
    Dernier message: 10/05/2009, 18h49
  4. Réponses: 2
    Dernier message: 17/09/2008, 16h17
  5. Comment ouvrir un fichier sans connaitre son nom
    Par APoLLoN1234 dans le forum C++
    Réponses: 8
    Dernier message: 10/09/2006, 18h04

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