我试图在C#中获取磁盘的簇大小。我发现的所有内容都说使用“GetFreeDiskSpace”,但我无法让它工作。看起来好像我错过了使用或其他东西。
当我谷歌The name 'GetDiskFreeSpace' does not exist in the current context
它会带来除了这个特定错误之外的所有内容。如果我执行完全短语搜索,Google会说没有找到任何内容,然后会显示不准确的短语搜索结果。
我正在尝试确定GetFreeDiskSpace
的来源,而不是如何修复The name 'UnknownKeyWord' does not exist in the current context
消息。
我需要获取磁盘的实际簇大小,而不是我可以确定磁盘上的大小,但所以我可以填充一个ComboBox。
注意:我使用的是VS 2010。
以下是我的用法:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Diagnostics;
using System.Globalization;
using System.Management;
using System.Runtime.InteropServices;
我也有以下内容:
// Pinvoke for API function
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
代码(未完成......我需要解析GetFreeDiskSpace中的信息)我必须得到的簇大小是:
private void btnRefreshDrives_Click(object sender, EventArgs e)
{
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)
{
if (d.IsReady)
{
strDriveInfo = d.Name + " " + d.VolumeLabel;
strCurrentFS = d.DriveFormat;
strDriveLetter = d.Name;
// The GetFreeDiskSpace has the red squiggly line under it in VS.
ClusterSize = SectorsPerCluster * BytesPerSector;
GetDiskFreeSpace(strDriveLetter, out SectorsPerCluster, out BytesPerSector, out NumberOfFreeClusters, out TotalNumberOfClusters);
}
}
}
答案 0 :(得分:3)
如果要使用GetFreeDiskSpace,则需要导入函数定义:
[DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Auto)]
static extern bool GetDiskFreeSpace(string lpRootPathName,
out uint lpSectorsPerCluster,
out uint lpBytesPerSector,
out uint lpNumberOfFreeClusters,
out uint lpTotalNumberOfClusters);
答案 1 :(得分:0)
有两个问题:
您实际上没有声明(至少是复制到代码中的内容)GetDiskFreeSpace方法。它应该是:
[DllImport("kernel32",SetLastError = true, CharSet = CharSet.Auto)]
public static extern int GetDiskFreeSpace(string lpRootPathName, out int lpSectorsPerCluster, out int lpBytesPerSector, out int lpNumberOfFreeClusters, out int lpTotalNumberOfClusters);
在检索值之前,您正在计算ClusterSize。应该是:
GetDiskFreeSpace(strDriveLetter, out SectorsPerCluster, out BytesPerSector, out NumberOfFreeClusters, out TotalNumberOfClusters);
var ClusterSize = SectorsPerCluster * BytesPerSector;
我已经确认通过这两项更改(以及相应的错误检查),这可以正常工作。