none
IntPtr en C# RRS feed

  • Question

  • Une question qui peux paraitre celle d'un novice et faire rire les inconditionnels du C, C++ :

    Comment en C# créer un pointeur IntPtr sur une variable ?

    Exemple : utilisation de la fonction API GetFileSize 

    Merci d'avance

    Bien entendu j'ai suivi les recommandations et utilisé GetFileSizeEX, mais j'aimerais bien connaitre la réponse si elle existe.


    riri
    dimanche 24 janvier 2010 19:03

Réponses

Toutes les réponses

  • Bonsoir,

    Je suppose par rapport à votre exemple (GetFileSize) que vous souhaitez obtenir un handle de fichier.

    Voici comment vous pouvez procéder : 

    	FileStream fs = new FileStream(@"C:\votrefichier", FileMode.Open);
    	IntPtr ptr = fs.SafeFileHandle.DangerousGetHandle();
    	uint uSize = GetFileSize(ptr, IntPtr.Zero);
    	fs.Close();
    
    
    A savoir que dans le cas présent il existe une alternative : 

    	FileInfo fi = new FileInfo(@"c:\votreFIchier");
    	long lSize = fi.Length;

    Dans cette exemple uSize = lSize

    Au sujet de la structure IntPtr représentant des pointeurs ou handles : http://msdn.microsoft.com/fr-fr/library/system.intptr(VS.80).aspx
    Pour des informations concernant les pointeurs : http://msdn.microsoft.com/fr-fr/library/t2yzs44b(VS.80).aspx


    Cordialement, 

    Mathieu
     
    Mathieu Francesch Sharplog Engineering
    dimanche 24 janvier 2010 19:54
  • Vous supposez mal.
    Ma question est une question d'école en quelques sorte.
    je connais les propriétés de FileInfo dont FileInfo.Length, mais je suis dans un contexte de Path et FileName Long nécessitant l'utilisation des fonctions API avec le préfix \\?\.
    J'utilise, entre autres, la fonction API GetFileSizeEx.
    Mais je voulais tous simplement savoir s'il était possible en C# d'utilser la fonction API : GetFileSize

    "[

     

     

    DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]

     

    internal static extern uint GetFileSize(IntPtr hFile, IntPtr lpFileSizeHigh);"

    ET surtouT comment déclarer et utiliser le deuxième paramètre : IntPtr lpFileSizeHigh ?

    Sachant d'autre part que si l'appel est fait avec IntPtr.zero on a en retour un uint et non un long

    Le deuxième paramêtre de GetFileSize correspond apparement à un entier représentant le poids fort de la longueur du fichier, utile pour une taille de fichier de type long.

    Donc la question reste ouverte comment avoir  un IntPrt en C# ???????????

    Cordialement
    • Modifié BRI_67 dimanche 31 janvier 2010 15:06
    samedi 30 janvier 2010 19:38
  • Bonjour,

    Voici un exemple qui pourrait vous éclairer sur l’utilisation de IntPtr :

    http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/e7bb4152-30e3-4a00-93d5-0361060425d9

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    • Marqué comme réponse BRI_67 mercredi 3 février 2010 17:44
    mercredi 3 février 2010 12:54
  • merci bien, je vais regarder tout cela.
    riri
    • Marqué comme réponse BRI_67 mercredi 3 février 2010 17:44
    mercredi 3 février 2010 17:44