none
Block size d'une unité de disque. RRS feed

  • Question

  • En c# je voudrais récupérer le bock size physique d'une unité de disque (même avexc une fonction API de windows si nécessaire)
    Quelqu'un a t-il une idée.

    Merci d'avance
    riri
    samedi 16 janvier 2010 11:46

Réponses

  • J'ai déjà utilisé Pinvoke et surtout des fonctions API.
    Dans le cas présent j'ai utilisé la fonction API GetDiskFreeSpace.
    Merci bien pour le coup de main.
    Cordialement

    Ce qui en code donne :
      1. private uint GetBlockSize()
      2. {
      3. bool myRc = false;
      4. rootPathName = dir.FullName.Substring(0,1) +
      5. ":" + Path.DirectorySeparatorChar;
      6. myRc = GetDiskFreeSpace((
      7. String)rootPathName, out sectorsPerCluster, out bytesPerSector,
      8. out numberOfFreeClusters, out totalNumberOfClusters);
      9. return ( bytesPerSector * sectorsPerCluster );
      10. }
      11. plus bien sur les déclaratons adéquates

        1. // Dclaration pour la fonction API Win32 GetDiskFreeSpace
        2. [
        3. DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        4. static extern bool GetDiskFreeSpace(string lpRootPathName,
        5. out uint lpSectorsPerCluster,
        6. out uint lpBytesPerSector,
        7. out uint lpNumberOfFreeClusters,
        8. out uint lpTotalNumberOfClusters);
        9. private string rootPathName = "";
        10. private uint sectorsPerCluster = 0;
        11. private uint bytesPerSector = 0;
        12. private uint numberOfFreeClusters = 0;
        13. private uint totalNumberOfClusters = 0;
        14. private uint blockSize = 0;

      riri
      • Marqué comme réponse BRI_67 lundi 18 janvier 2010 13:16
      lundi 18 janvier 2010 13:15

    Toutes les réponses

    • Bonjour,

      Pour ce faire, vous devez faire une déclaration Pinvoke (pinvoke.net)

      Pour faciliter l'utilisation des API windows, il y a un projet très intéressant ici : http://mwinapi.sourceforge.net/

      Et en ce qui concerne votre problème vous pouvez vous orienter vers la classe ExtendedFileInfo

      J'espère que cela vous aidera.

      Cordialement,

      Mathieu

      Mathieu Francesch Sharplog Engineering
      samedi 16 janvier 2010 12:13
    • J'ai déjà utilisé Pinvoke et surtout des fonctions API.
      Dans le cas présent j'ai utilisé la fonction API GetDiskFreeSpace.
      Merci bien pour le coup de main.
      Cordialement

      Ce qui en code donne :
        1. private uint GetBlockSize()
        2. {
        3. bool myRc = false;
        4. rootPathName = dir.FullName.Substring(0,1) +
        5. ":" + Path.DirectorySeparatorChar;
        6. myRc = GetDiskFreeSpace((
        7. String)rootPathName, out sectorsPerCluster, out bytesPerSector,
        8. out numberOfFreeClusters, out totalNumberOfClusters);
        9. return ( bytesPerSector * sectorsPerCluster );
        10. }
        11. plus bien sur les déclaratons adéquates

          1. // Dclaration pour la fonction API Win32 GetDiskFreeSpace
          2. [
          3. DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
          4. static extern bool GetDiskFreeSpace(string lpRootPathName,
          5. out uint lpSectorsPerCluster,
          6. out uint lpBytesPerSector,
          7. out uint lpNumberOfFreeClusters,
          8. out uint lpTotalNumberOfClusters);
          9. private string rootPathName = "";
          10. private uint sectorsPerCluster = 0;
          11. private uint bytesPerSector = 0;
          12. private uint numberOfFreeClusters = 0;
          13. private uint totalNumberOfClusters = 0;
          14. private uint blockSize = 0;

        riri
        • Marqué comme réponse BRI_67 lundi 18 janvier 2010 13:16
        lundi 18 janvier 2010 13:15