2009-05-12 5 views
4

ファイルを保存するための容量としてパスを確認するには、.NETで最も良い方法は何ですか。私は、ソースがファイルを2回目にダウンロードすることを許可しないので、ダウンロードする前にファイルのための空きがあることを確認する必要があります。私は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の短い機能があります。

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

あなたはWin32 APIのソリューションをwnat場合this MSDN help pageにより示唆されるように、あなたは、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倍が存在することを確認することを考えていました。しかし、ノートのおかげで –

関連する問題