Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Futur Membre du Club
    Inscrit en
    décembre 2009
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : décembre 2009
    Messages : 146
    Points : 18
    Points
    18

    Par défaut Utilisation de FILE_FLAG_NO_BUFFERING en VB.net

    Bonjour,

    Je cherche à lire des fichiers sans avoir à passer par le cache windows.

    J'ai trouvé sur le web:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    [DllImport("kernel32", SetLastError=true)]
        static extern unsafe SafeFileHandle CreateFile(
            string FileName,           // file name
            uint DesiredAccess,        // access mode
            uint ShareMode,            // share mode
            IntPtr SecurityAttributes, // Security Attr
            uint CreationDisposition,  // how to create
            uint FlagsAndAttributes,   // file attributes
            SafeFileHandle  hTemplate // template file  
            );
     
        SafeFileHandle handle = CreateFile(FileName,
                                FileAccess.Read,
                                FileShare.None,
                                IntPtr.Zero,
                                FileMode.Open,
                                 FILE_FLAG_NO_BUFFERING,
                                null);
     
        FileStream stream = new FileStream(handle, 
                                    FileAccess.Read, 
                                    true, 
                                    4096);
    et ceci:

    Code :
    1
    2
    3
    4
    const FileOptions FileFlagNoBuffering = (FileOptions)0x20000000;
     
    FileStream file = new FileStream(fileName, fileMode, fileAccess, fileShare, blockSize,
        FileFlagNoBuffering | FileOptions.WriteThrough | fileOptions);
    Je ne sais pas comment le réimplanter en Vb.net.

    Auriez vous des exemples de fonctions similaire en VB.net?

    Merci.

  2. #2
    Futur Membre du Club
    Inscrit en
    décembre 2009
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : décembre 2009
    Messages : 146
    Points : 18
    Points
    18

    Par défaut

    J'ai pu écrire le code en question:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    Dim FileName As String = "Toto"
    Const FileFlagNoBuffering As FileOptions = DirectCast(&H20000000, FileOptions)
     Dim handle As SafeFileHandle = ME.CreateFile(FileName, FileAccess.Read, FileShare.None, 
    IntPtr.Zero, FileMode.Open, 
    FileFlagNoBuffering, Nothing)
    Dim stream As FileStream = New FileStream(handle, FileAccess.Read, True, 4096)
    La méthode CreateFile est défini ici:
    Code :
    1
    2
    3
    4
    5
    6
    <Runtime.InteropServices.DllImport("kernel32", SetLastError:=True)> _
    Public Shared Function CreateFile(ByVal FileName As String, ByVal DesiredAccess As UInteger, 
    ByVal ShareMode As UInteger, ByVal SecurityAttributes As IntPtr, ByVal CreationDisposition As UInteger, ByVal FlagsAndAttributes As UInteger, _
            ByVal hTemplate As Microsoft.Win32.SafeHandles.SafeFileHandle) As SafeFileHandle
     
     End Function
    Mais en exécutant le code j'ai une exception qui apparait à cette ligne:
    Code :
    1
    2
      Dim handle As SafeFileHandle = ME.CreateFile(FileName, FileAccess.Read, FileShare.None, IntPtr.Zero, 
    FileMode.Open, FileFlagNoBuffering, Nothing)
    "SafeHandle cannot be null."

  3. #3
    Futur Membre du Club
    Inscrit en
    décembre 2009
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : décembre 2009
    Messages : 146
    Points : 18
    Points
    18

    Par défaut

    Bonjour,

    J'ai trouvé l'info qu'il me fallait ici:

    http://msdn.microsoft.com/en-us/libr...ilehandle.aspx.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •