Précédent   Forum du club des développeurs et IT Pro > Dotnet > Général Dotnet > Débuter
Débuter Forum d'entraide pour bien débuter avec Dotnet
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/09/2012, 10h39   #1
Vanito
Candidat au titre de Membre du Club
 
Inscription : décembre 2009
Messages : 112
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 112
Points : 13
Points : 13
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.
Vanito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2012, 11h22   #2
Vanito
Candidat au titre de Membre du Club
 
Inscription : décembre 2009
Messages : 112
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 112
Points : 13
Points : 13
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."
Vanito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2012, 09h16   #3
Vanito
Candidat au titre de Membre du Club
 
Inscription : décembre 2009
Messages : 112
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 112
Points : 13
Points : 13
Bonjour,

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

http://msdn.microsoft.com/en-us/libr...ilehandle.aspx.
Vanito est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h57.


 
 
 
 
Partenaires

Hébergement Web