首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • C# WinForm: 如 何 获 取 本 机 簇 的 大 小 (字 节 数) [无满意答案结帖]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yangjianpro_hotmail
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-21 18:18:08 楼主
    C# WinForm:

        Windows系统簇默认是4Kb  但人为格式化的时候你可以自己选择改变,从512到64K都行
        试问.NET下如何获取本机用户采取的是哪个大小,即获取本机簇的大小(字节数);
        .NET如果不可以获取的话,有相关的API或其他方法也行,谢谢!!!
    60  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • LQknife
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 20:57:001楼 得分:0
    晓习 顶顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • findcaiyzh
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 08:11:542楼 得分:0
    这段代码是C++的,你可以参考一下:
    http://www.codeguru.com/cpp/w-p/system/article.php/c2885

    另外一个论坛上的回答:

    On W2K3 you can use the System.Management classes and WMI class
    win32_volume to retrieve the cluster size.
    On XP you need to PInvoke the CreateFile, DeviceIoControl and CloseHandle
    Win32 API's.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • findcaiyzh
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 08:15:333楼 得分:0
    这个更简单一些:

    C# code
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)] static extern bool GetDiskFreeSpace([MarshalAs(UnmanagedType.LPTStr)]string rootPathName, ref int sectorsPerCluster, ref int bytesPerSector, ref int numberOfFreeClusters, ref int totalNumbeOfClusters); public static DiskInfo GetDiskDiskInfo(string rootPathName) { DiskInfo diskInfo = new DiskInfo(); int sectorsPerCluster = 0, bytesPerSector = 0, numberOfFreeClusters = 0, totalNumberOfClusters = 0; GetDiskFreeSpace(rootPathName, ref sectorsPerCluster, ref bytesPerSector, ref numberOfFreeClusters, ref totalNumberOfClusters); diskInfo.RootPathName = rootPathName; diskInfo.SectorsPerCluster = sectorsPerCluster; diskInfo.BytesPerSector = bytesPerSector; diskInfo.NumberOfFreeClusters = numberOfFreeClusters; diskInfo.TotalNumberOfClusters = totalNumberOfClusters; return diskInfo; } public struct DiskInfo { public string RootPathName; public int SectorsPerCluster; public int BytesPerSector; public int NumberOfFreeClusters; public int TotalNumberOfClusters; } //Forgot to add this on my initial post, and I just noticed. public static int GetActualFileSize(FileInfo file) { double clusterSize = 0; double numberofClusters = 0; int actualSize = 0; DiskInfo diskInfo = new DiskInfo(); diskInfo = GetDiskInfo(file.Directory.Root.FullName); [color=#FF0000]clusterSize = (diskInfo.BytesPerSector * diskInfo.SectorsPerCluster);[/color] //Added this, seems if the file length and clustersize are exact it would over-report the size if ((file.Length % clusterSize) > 0) clusterSize += 1; numberofClusters = Math.Round(file.Length / clusterSize); actualSize = (int)(numberofClusters * clusterSize); return actualSize; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • findcaiyzh
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 08:17:404楼 得分:0
    ft. 本来想把赋值给那句clusterSize 标红的
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved