2009-05-12 3 views
4

.Net에서 파일을 저장할 용량을 경로로 확인하는 가장 좋은 방법은 무엇입니까? 내가 다운로드하기 전에 내가 소스 파일을 두 번째로 다운로드 할 수 없게됩니다 파일을위한 공간이 있는지 확인해야합니다. System.IO.DriveInfo에서 보았지만 UNC 경로에서는 작동하지 않습니다..Net을 사용하여 파일 시스템 용량을 확인하는 가장 좋은 방법은 무엇입니까?

+0

WMI 대신 API 호출은 어떻습니까? –

+0

@Matthew : WMI보다 API를 선호하는 이유는 무엇입니까? 매우 짧은 솔루션이 있으며 WMI를 사용하면 완전히 관리됩니다 (System.Management 네임 스페이스 사용). – Noldorin

+0

나는 단순한 PInvoke가 WMI에서 플레이하는 것보다 낫다고 생각한다. 그러나 나는 WMI가 효과가있을 것이라고 생각합니다. –

답변

5

여기에 W3C를 사용하여 드라이브 (로컬 또는 네트워크/UNC)의 여유 공간을 확보하는 방법을 보여주는 this page의 간단한 기능이 있습니다. 당신이는 Win32 API 솔루션을 wnat 경우 this MSDN help page에 의해 제안

private static ulong GetFreeDiskSpaceInBytes(string drive) 
{ 
    ManagementObject disk = 
     new ManagementObject("win32_logicaldisk.deviceid=\"" + drive + ":\""); 
    disk.Get(); 
    return (ulong)disk["FreeSpace"]; 
} 

, 당신은 GetDiskFreeSpaceEx 기능을 사용할 수 있습니다. 또한 로컬 및 네트워크 드라이브 이름을 모두 지원하는 것으로 보입니다.

Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" _ 
    Alias "GetDiskFreeSpaceExA" (ByVal lpDirectoryName As String, _ 
    lpFreeBytesAvailableToCaller As Currency, _ 
    lpTotalNumberOfBytes As Currency, _ 
    lpTotalNumberOfFreeBytes As Currency) As Long 

Private Sub Form_Click() 
    Dim Status As Long 
    Dim TotalBytes As Currency 
    Dim FreeBytes As Currency 
    Dim BytesAvailableToCaller As Currency 

    Status = GetDiskFreeSpaceEx(Text1.Text, BytesAvailableToCaller, _ 
     TotalBytes, FreeBytes) 
    If Status <> 0 Then 
     MsgBox Format(TotalBytes * 10000, "#,##0"), , "Total Bytes" 
     MsgBox Format(FreeBytes * 10000, "#,##0"), , "Free Bytes" 
     MsgBox Format(BytesAvailableToCaller * 10000, "#,##0"), , _ 
      "Bytes Available To Caller" 
    End If 
End Sub 

C#으로 변환하는 데 문제가 있으면 알려주십시오.

여기서는 WMI 솔루션을 권장해야합니다. (더 적은 수의 줄 제외) 완전히 관리되지만 트릭을 수행해야합니다.

0

WMI를 사용하여 필요한 답변을 얻을 수 있으니 대개는 시작하기에 좋습니다.

0

디스크가 파일을 저장할 수 있는지 확인하는 유일한 방법은 실제로 디스크에 해당 크기의 파일을 만드는 것입니다.

디스크 정보에 충분한 공간이 있다고 말하는 경우에도 조각 모음으로 인해 사용 가능한 디스크 공간을 거의 100 % 사용할 수 없습니다.

+0

나는 필요로하는 공간의 2 ~ 3 배가 여분의 커버리지를 가지고 있다고 확신하고있다. 하지만 메모 주셔서 감사합니다. –

관련 문제