问题描述
请问怎么获得无系统的存储卡的容量等信息?存储卡无系统引导无FAT表之类的,没有格式化,打个比方说所有扇区的所有字节值为零吧。计算机我的电脑里显示为可移动磁盘,但是是没有格式化的。那么怎样用c#获得存储卡的容量大小,扇区大小,扇区总数等信息?非得直接调用API么?当然能提供详细的调用API例子也行
解决方案
解决方案二:
.net这些底层的东西无法获取到的。。。。
解决方案三:
.Net对此有封装。试一试。usingSystem.Management;//需添加引用classProgram{staticreadonlyString[]arrManagementItem=newString[]{"Availability","BytesPerSector","Capabilities","CapabilityDescriptions","Caption","CompressionMethod","ConfigManagerErrorCode","ConfigManagerUserConfig","CreationClassName","DefaultBlockSize","Description","DeviceID","ErrorCleared","ErrorDescription","ErrorMethodology",//"FirmwareRevision","Index","InstallDate","InterfaceType","LastErrorCode","Manufacturer","MaxBlockSize","MaxMediaSize","MediaLoaded","MediaType","MinBlockSize","Model","Name","NeedsCleaning","NumberOfMediaSupported","Partitions","PNPDeviceID","PowerManagementCapabilities","PowerManagementSupported","SCSIBus","SCSILogicalUnit","SCSIPort","SCSITargetId","SectorsPerTrack",//"SerialNumber","Signature","Size","Status","StatusInfo","SystemCreationClassName","SystemName","TotalCylinders","TotalHeads","TotalSectors","TotalTracks","TracksPerCylinder",};staticvoidMain(string[]args){ManagementClassmc=newManagementClass("Win32_DiskDrive");foreach(ManagementObjectmoinmc.GetInstances()){foreach(StringmiinarrManagementItem){Console.WriteLine("{0}:{1}",mi,mo[mi]);}}Console.ReadKey();}}
参考:http://msdn.microsoft.com/en-us/library/windows/desktop/aa394132(v=vs.85).aspx
解决方案四:
楼上这个我已经试过的,不行,只能取得格式化过的信息,否则连容量都取不到好像
解决方案五:
自己顶一顶
解决方案六:
试下[DllImport("kernel32.dll")]staticexternIntPtrCreateFile(stringlpFileName,uintdwDesiredAccess,uintdwShareMode,IntPtrlpSecurityAttributes,uintdwCreationDisposition,uintdwFlagsAndAttributes,IntPtrhTemplateFile);[DllImport("kernel32.dll")]staticexternboolDeviceIoControl(IntPtrhDevice,intioControlCode,IntPtrpInBuf,intinBufSize,outlongdiskSize,intoutBufSize,outintpBytesReturned,IntPtrpOverlapped);staticvoidMain(string[]args){longdiskSize=0;intreturnedBytes=0;//\.PhysicalDrive0改成USB设备名IntPtrhandle=CreateFile(@"\.PhysicalDrive0",0x80000000,3,IntPtr.Zero,3,0,IntPtr.Zero);DeviceIoControl(handle,0x0007405c,IntPtr.Zero,0,outdiskSize,8,outreturnedBytes,IntPtr.Zero);Console.WriteLine(diskSize);}
解决方案七:
这个貌似很难获取到吧。。。。如果能,一同等
解决方案八:
解决方案九:
引用6楼bkq421511585的回复:
这个貌似很难获取到吧。。。。如果能,一同等
解决方案十:
引用7楼chinajiyong的回复:
用C#访问硬盘物理扇区和逻辑扇区的方法,API实现C#读写分区(按扇区)
第一个我早就试过了,对于没有格式化的SD或者TF卡可以读写,但是对于格式化过后的,从零地址开始写,好像并没有写在物理的零地址开始处,不过我还没有反复试谢谢楼上几位,我有时间再看看试试希望更多答案谢谢
解决方案十一:
引用9楼wangfuchong的回复:
引用7楼chinajiyong的回复:用C#访问硬盘物理扇区和逻辑扇区的方法,API实现C#读写分区(按扇区)第一个我早就试过了,对于没有格式化的SD或者TF卡可以读写,但是对于格式化过后的,从零地址开始写,好像并没有写在物理的零地址开始处,不过我还没有反复试谢谢楼上几位,我有时间再看看试试希望更多答案谢谢
我可能是将物理磁盘号和逻辑磁盘号搞混了,可是怎样取得物理磁盘序号呢?
解决方案十二:
引用9楼wangfuchong的回复:
引用7楼chinajiyong的回复:用C#访问硬盘物理扇区和逻辑扇区的方法,API实现C#读写分区(按扇区)第一个我早就试过了,对于没有格式化的SD或者TF卡可以读写,但是对于格式化过后的,从零地址开始写,好像并没有写在物理的零地址开始处,不过我还没有反复试谢谢楼上几位,我有时间再看看试试希望更多答案谢谢
我可能是将物理磁盘号和逻辑磁盘号搞混了,可是怎样取得物理磁盘序号呢?
解决方案十三:
引用11楼wangfuchong的回复:
引用9楼wangfuchong的回复:引用7楼chinajiyong的回复:用C#访问硬盘物理扇区和逻辑扇区的方法,API实现C#读写分区(按扇区)第一个我早就试过了,对于没有格式化的SD或者TF卡可以读写,但是对于格式化过后的,从零地址开始写,好像并没有写在物理的零地址开始处,不过我还没有反复试谢谢楼上几位,我有时间再看看试试希望更……
//usingsystem.runtime.interopservices;//usingsystem.management;//获取磁盘序列号publicstringgetharddiskid2(){ try { System.Management.ManagementObjectSearchercmicWmi=new ManagementObjectSearcher("SELECT*FROMWin32_DiskDrive"); System.UInt32tmpUint32=0; foreach(ManagementObjectcmicWmiObjincmicWmi.Get()) { tmpUint32=Convert.ToUInt32(cmicWmiObj["signature"].ToString()); } this.textBox1.Text=tmpUint32.ToString(); this.gProgressBar1.Value++; } catch(Exceptionex1) { thrownewException(ex1.ToString()); }}
参考
解决方案十四:
楼上,谢谢回答还没来得及仔细看全部不过我说的是不是怎样取得所有的物理磁盘号,而是怎样根据用户看到选择的逻辑盘符获得物理盘号罗列物理盘号我早就取得过,关键是怎么知道哪个物理盘号是对应需要操作的移动存储设备?
解决方案十五:
这个真心不会了。给楼主顶一下,顺便等答案。很高端的样子。
解决方案:
引用13楼wangfuchong的回复:
楼上,谢谢回答还没来得及仔细看全部不过我说的是不是怎样取得所有的物理磁盘号,而是怎样根据用户看到选择的逻辑盘符获得物理盘号罗列物理盘号我早就取得过,关键是怎么知道哪个物理盘号是对应需要操作的移动存储设备?
这个真心不会了,靠你自己探索了,探索出来分享一下,谢谢
解决方案:
关注一下,顺便等等问题答案