Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: hàm xem kích thước free ổ cứng

  1. #1
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    Mặc định hàm xem kích thước free ổ cứng

    Platform SDK: File Systems
    GetDiskFreeSpace

    The GetDiskFreeSpace function retrieves information about the specified disk, including the amount of free space on the disk.

    The GetDiskFreeSpace function cannot report volume sizes that are greater than 2 gigabytes (GB). To ensure that your application works with large capacity hard drives, use the GetDiskFreeSpaceEx function.


    Visual C++ Code:
    1. BOOL GetDiskFreeSpace(
    2.   LPCTSTR lpRootPathName,
    3.   LPDWORD lpSectorsPerCluster,
    4.   LPDWORD lpBytesPerSector,
    5.   LPDWORD lpNumberOfFreeClusters,
    6.   LPDWORD lpTotalNumberOfClusters
    7. );

    Parameters
    lpRootPathName
    [in] Pointer to a null-terminated string that specifies the root directory of the disk for which information is to be returned. If this parameter is NULL, the function uses the root of the current disk. If this parameter is a UNC name, it must include a trailing backslash (for example, \\MyServer\MyShare\). Furthermore, a drive specification must have a trailing backslash (for example, C:\).
    Windows 95: The initial release of Windows 95 does not support UNC paths. Therefore, you must temporarily map the UNC path to a drive letter, query the free disk space on the drive, then remove the temporary mapping. Windows 95 OSR2 and later support UNC paths.
    lpSectorsPerCluster
    [out] Pointer to a variable that receives the number of sectors per cluster.
    lpBytesPerSector
    [out] Pointer to a variable that receives the number of bytes per sector.
    lpNumberOfFreeClusters
    [out] Pointer to a variable for the total number of free clusters on the disk that are available to the user associated with the calling thread.
    If per-user disk quotas are in use, this value may be less than the total number of free clusters on the disk.

    lpTotalNumberOfClusters
    [out] Pointer to a variable for the total number of clusters on the disk that are available to the user associated with the calling thread.
    If per-user disk quotas are in use, this value may be less than the total number of clusters on the disk.

    Return Values
    If the function succeeds, the return value is nonzero.

    If the function fails, the return value is zero. To get extended error information, call GetLastError.

    Remarks
    The GetDiskFreeSpaceEx function lets you avoid some of the arithmetic required by the GetDiskFreeSpace function.

    Windows 95 OSR2 and later: The GetDiskFreeSpaceEx function is available beginning with Windows 95 OEM Service Release 2 (OSR2), and you should use it whenever possible. The GetDiskFreeSpaceEx function returns correct values for all volumes, including those that are larger than 2 GB.
    Windows Me/98/95: For volumes that are larger than 2 GB, the GetDiskFreeSpace function may return misleading values. The function caps the values stored into *lpNumberOfFreeClusters and *lpTotalNumberOfClusters so as to never report volume sizes that are greater than 2 GB. On volumes that are smaller than 2 GB with an actual sectors per cluster greater than 64, *lpSectorsPerCluster will be capped at 64 and the values stored into *lpSectorsPerCluster, *lpNumberOfFreeClusters, and *lpTotalNumberOfClusters will be incorrect. That is because the operating system adjusts the values so that computations with them yield the correct volume size with the capped *lpSectorsPerCluster.
    Requirements
    Client Requires Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, or Windows 95.
    Server Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server.
    Header Declared in Winbase.h; include Windows.h.

    Library Link to Kernel32.lib.

    DLL Requires Kernel32.dll.
    Unicode Implemented as GetDiskFreeSpaceW (Unicode) and GetDiskFreeSpaceA (ANSI). Note that Unicode support on Windows Me/98/95 requires Microsoft Layer for Unicode.


    See Also
    Disk Management Functions, GetDiskFreeSpaceEx, GetDriveType

    --------------------------------------------------------------------------------

    Last updated: March 2005 | What did you think of this topic? | Order a Platform SDK CD
    © Microsoft Corporation. All rights reserved. Terms of use.



    Requirements
    Client Requires Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, or Windows 95.
    Server Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server.
    Header Declared in Winbase.h; include Windows.h.

    Library Link to Kernel32.lib.

    DLL Requires Kernel32.dll.
    Unicode Implemented as GetDiskFreeSpaceW (Unicode) and GetDiskFreeSpaceA (ANSI). Note that Unicode support on Windows Me/98/95 requires Microsoft Layer for Unicode.

    See Also
    Disk Management Functions, GetDiskFreeSpaceEx, GetDriveType
    mình có đọc trong MSDN có khai báo cái hàm GetDiskFreeSpace như thế này mà không biết làm thế nào để sử dụng nó đây
    anh em có gì chỉ giáo thêm
    còn đây là VD của nó trên VB mình thấy trên VB thì nó chạy nuột lắm
    híc
    VB Code:
    1. 'In general section
    2. Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long
    3.  
    4. Private Sub Form_Load()
    5.     'KPD-Team 1998
    6.    'URL: http://www.allapi.net/
    7.    'E-Mail: KPDTeam@Allapi.net
    8.  
    9.     Dim Sectors as Long,Bytes as Long,FreeC as Long, TotalC as Long,Total as Long,Freeb as Long
    10.     'Retrieve information about the C:\
    11.    GetDiskFreeSpace "C:\", Sectors, Bytes, Freec, Totalc
    12.     'Set graphic mode to persistent
    13.    Me.AutoRedraw = True
    14.     'Print the information to the form
    15.    Me.Print " Path: C:\"
    16.     Me.Print " Sectors per Cluster:" + Str$(Sector)
    17.     Me.Print " Bytes per sector:" + Str$(Bytes)
    18.     Me.Print " Number Of Free Clusters:" + Str$(Freec)
    19.     Me.Print " Total Number Of Clusters:" + Str$(Totalc)
    20.     Total = rTotalc& * rSector& * rBytes&
    21.     Me.Print " Total number of bytes in path:" + Str$(Total)
    22.     Freeb = rFreec& * rSector& * rBytes&
    23.     Me.Print " Free bytes:" + Str$(Freeb)
    24. End sub
    mình có thử trên VC++ dùng cách này nhưng không được

    Visual C++ Code:
    1. #include<iostream.h>
    2. #include<windows.h>
    3. int main()
    4. {
    5.     int Sectors;
    6.     int Bytes,Freec,Totalc;
    7.     GetDiskFreeSpace ("C:\ ", Sectors, Bytes, Freec, Totalc);
    8. }

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    /root
    Bài viết
    318

    The GetDiskFreeSpace function cannot report volume sizes that are greater than 2 gigabytes (GB). To ensure that your application works with large capacity hard drives, use the GetDiskFreeSpaceEx function.

  3. #3
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    Visual C++ Code:
    1. #include<iostream>
    2. #include<windows.h>
    3. using namespace std;
    4. int main()
    5. {
    6.     unsigned long *Sectors;
    7.     unsigned long *Bytes,*Freec,*Totalc;
    8.     GetDiskFreeSpaceA("C:\ " , Sectors, Bytes, Freec, Totalc);
    9.     cout<<"so sectors: "<<Sectors;
    10.     return 0;
    11. }
    OK nhưng vẫn lỗi,thế không biết sao nữa,...

  4. #4
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Mặc định xem kích thước free ổ cứng - Mã nguồn VC++

    Dr có ví dụ nè, tham khảo nhé:

    Tạo một Win32 console project, sau đó đưa toàn bộ code sau vào và run, xem kết quả rồi nghiên cứu đi.

    Visual C++ Code:
    1. // Determines the amount of free space available for the caller.
    2. // Runs on Windows 95 retail and later, and on Windows 4.0 and later.  
    3. // Uses GetDiskFreeSpaceEx if available, otherwise reverts to
    4. // GetDiskFreeSpace.
    5. //
    6. // To determine the amount of available space correctly:
    7. //
    8. // * Use 64-bit math with the return values of both GetDiskFreeSpace
    9. // and GetDiskFreeSpaceEx so that you can determine the sizes of
    10. // volumes that are larger than 2GB.
    11. //
    12. // Programs that need to determine how much free space the current user
    13. // can have (such as whether there is enough space to complete an
    14. // installation) have an additional requirement:
    15. //
    16. // * Use the lpFreeBytesAvailableToCaller value from
    17. // GetDiskFreeSpaceEx rather than lpTotalNumberOfFreeBytes.  
    18. // This is because Windows 2000 has disk quota management that
    19. // administrators may use to limit the amount of disk space that
    20. // users may use.
    21.  
    22.  
    23. #include "stdafx.h"
    24. #include <windows.h>
    25. #include <iostream>
    26. using namespace std;
    27.  
    28. typedef BOOL (WINAPI *P_GDFSE)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER);
    29.  
    30. int main (int argc, char **argv)
    31. {
    32.     BOOL  fResult;
    33.  
    34.     char    pszDrive[]  = _T("C:\\");
    35.  
    36.     DWORD   dwSectPerClust,
    37.             dwBytesPerSect,
    38.             dwFreeClusters,
    39.             dwTotalClusters;
    40.  
    41.     P_GDFSE pGetDiskFreeSpaceEx = NULL;
    42.  
    43.     unsigned __int64    i64FreeBytesToCaller,
    44.                         i64TotalBytes,
    45.                         i64FreeBytes;
    46.  
    47. //  Use GetDiskFreeSpaceEx if available; otherwise, use
    48. //  GetDiskFreeSpace.
    49. //
    50. //  Note: Since GetDiskFreeSpaceEx is not in Windows 95 Retail, we
    51. //  dynamically link to it and only call it if it is present.  We
    52. //  don't need to call LoadLibrary on KERNEL32.DLL because it is
    53. //  already loaded into every Win32 process's address space.
    54.     pGetDiskFreeSpaceEx = (P_GDFSE)GetProcAddress(GetModuleHandle (_T("kernel32.dll")),_T("GetDiskFreeSpaceExA"));
    55.     if (pGetDiskFreeSpaceEx)
    56.     {
    57.         fResult = pGetDiskFreeSpaceEx (pszDrive,
    58.             (PULARGE_INTEGER)&i64FreeBytesToCaller,
    59.             (PULARGE_INTEGER)&i64TotalBytes,
    60.             (PULARGE_INTEGER)&i64FreeBytes);
    61.         if (fResult)
    62.         {
    63.             cout << _T("\n\nGetDiskFreeSpaceEx reports\n\n");
    64.             cout << _T("Available space to caller = ") << i64FreeBytesToCaller / (1024*1024) << _T("MB\n");
    65.             cout << _T("Total space               = ") << i64TotalBytes / (1024*1024) << _T("MB\n");
    66.             cout << _T("Free space on drive       = ") << i64FreeBytes / (1024*1024) << _T("MB\n");
    67.         }
    68.     }
    69.     else
    70.     {
    71.         fResult = GetDiskFreeSpace (pszDrive, &dwSectPerClust, &dwBytesPerSect, &dwFreeClusters, &dwTotalClusters);
    72.         if (fResult)
    73.         {
    74.             /* force 64-bit math */
    75.             i64TotalBytes = (__int64)dwTotalClusters * dwSectPerClust *
    76.                 dwBytesPerSect;
    77.             i64FreeBytes = (__int64)dwFreeClusters * dwSectPerClust *
    78.                 dwBytesPerSect;
    79.  
    80.             cout << _T("GetDiskFreeSpace reports\n\n");
    81.             cout << _T("Free space  = %I64u MB\n") << i64FreeBytes / (1024*1024);
    82.             cout << _T("Total space = %I64u MB\n") << i64TotalBytes / (1024*1024);
    83.         }
    84.     }
    85.  
    86.     if (!fResult)
    87.         cout << _T("error: " << GetLastError() << _T(" - Could not get free space for ")<< _T("\"") << argv[1]) <<_T("\"\n");
    88.  
    89.     system(_T("PAUSE"));
    90.     return EXIT_SUCCESS;
    91. }

    regards!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  5. #5
    Ngày gia nhập
    10 2007
    Nơi ở
    /root
    Bài viết
    318

    Trích dẫn Nguyên bản được gửi bởi coder_gate Xem bài viết
    Visual C++ Code:
    1. #include<iostream>
    2. #include<windows.h>
    3. using namespace std;
    4.  
    5. int main()
    6. {
    7.     unsigned long *Sectors;
    8.     unsigned long *Bytes,*Freec,*Totalc;
    9.     GetDiskFreeSpaceA("C:\ " , Sectors, Bytes, Freec, Totalc);
    10.     cout<<"so sectors: "<<Sectors;
    11.     return 0;
    12. }

    OK nhưng vẫn lỗi,thế không biết sao nữa,...
    Cậu xem lại các tham số truyền vào , nó là con trỏ tới DWORD .Cậu truyền sai be bét tham số còn kêu ca gì ?

  6. #6
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    Mặc định Mã nguồn xem kích thước free ổ cứng bằng C++

    Visual C++ Code:
    1. #include<iostream>
    2. #include<windows.h>
    3. int main()
    4. {
    5.     unsigned long Sectors;
    6.     unsigned long Bytes,Freec,Totalc;
    7.     GetDiskFreeSpaceA("C:\\ " , &Sectors, &Bytes, &Freec, &Totalc);
    8.     std::cout<<"\nSectors per Cluster: "<<Sectors;
    9.     std::cout<<"\nBytes per sector "<<Bytes;
    10.     std::cout<<"\nNumber Of Free Clusters:"<<Freec;
    11.     std::cout<<"\nTotal Number Of Clusters "<<Totalc;
    12.     system("pause");
    13.     return 0;
    14. }
    OK,thank
    Đã được chỉnh sửa lần cuối bởi AlexF : 31-08-2008 lúc 07:29 PM.

Các đề tài tương tự

  1. Download Movies Here! Free Movies Collection. Download Free: MovieServe.NET
    Gửi bởi digiman87 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 19-06-2011, 07:57 PM
  2. Free Movie Downloads Sites | Download Free Full Length Movies:MovieServe.Net
    Gửi bởi digiman87 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 30-03-2011, 10:15 AM
  3. Free Movie Downloads- The Best Sites for Free Movies-MovieServe.Net
    Gửi bởi digiman87 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 28-03-2011, 02:17 PM
  4. Phần mềm lập trình C C-Free 5.0 Pro *****ed
    Gửi bởi hongban trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 30
    Bài viết cuối: 23-05-2010, 03:42 PM
  5. Làm sao để lập trình đồ họa với C-Free
    Gửi bởi it4viet trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 19-12-2009, 09:28 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn