Wince4.2下 获得存储器大小的问题

Tomaslee 2006-03-23 05:59:54
HANDLE WINAPI FindFirstStore(
PSTOREINFO pStoreInfo
);
我在MSDN上找到了这个函数,我估计可以用来得到闪寸的容量大小,但是不知道如何得到,请高手指点迷经。
比如:目前SD卡的目录名称是
HANDLE hFindStore=NULL;
STOREINFO storeinfo;
storeinfo.cbSize= sizeof(STOREINFO);
storeinfo.szStoreName=_T("SD");
……//其他的初始化
hFindStore=FindFirstStore(&storeinfo);
if(hFindStore!=INVALID_HANDLE_VALUE)
{
//请高手指点这里,如何得到SD卡的容量大小
}
...全文
296 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tomaslee 2006-03-28
  • 打赏
  • 举报
回复
呵呵,谢谢.
大于2G的话,我会考虑用 高32位的
红牛哥110 2006-03-27
  • 打赏
  • 举报
回复
我上面不是已经告诉你了吗?
The values obtained by this function are of type ULARGE_INTEGER.

也就是说参数定义是要用ULARGE_INTEGER来定义,不要用PULARGE_INTEGER.
红牛哥110 2006-03-27
  • 打赏
  • 举报
回复
你的程式最多只能显示出2G,你把高32位给丢掉了,不过目前也算够了.

这两个类型都有一个共同点,
就是都是一个通过两个32位的成员变量来构成64位的结构体.
Tomaslee 2006-03-27
  • 打赏
  • 举报
回复
谢谢
jiess(刘伟庭)
我的函数已经可以实现这个功能了.
如下

BOOL DisplayStorgeSize(LPCTSTR lpszPath)
{
ASSERT(lpszPath!= NULL);
if (lpszPath==NULL)
return FALSE;

LPCTSTR lpstrPath=lpszPath;
ULARGE_INTEGER pFreeBAvailableToCaller;
ULARGE_INTEGER pTotalNuOfBytes;
CString strForMatName=_T("");

if(::GetDiskFreeSpaceEx(
lpstrPath,
&pFreeBAvailableToCaller,
&pTotalNuOfBytes,
NULL))
{ strForMatName.Format(_T("%d"),pTotalNuOfBytes.LowPart/1048576);
strForMatName+=_T(" M");
MessageBox(NULL,strForMatName,_T("Info"),MB_OKCANCEL);
return TRUE;
}
else return FALSE;
}


另外有个问题,还请高手指点
BOOL GetFileTime(
HANDLE hFile,
LPFILETIME lpCreationTime,
LPFILETIME lpLastAccessTime,
LPFILETIME lpLastWriteTime);

初始化成
FILETIME lpCreationTi;
FILETIME lpLastAccessTi;
FILETIME lpLastWriteTi;
是能返回正确值的

初始化成
LPFILETIME lpCreationTi;
LPFILETIME lpLastAccessTi;
LPFILETIME lpLastWriteTi;
就不能返回正确值


BOOL GetDiskFreeSpaceEx(
LPCWSTR lpDirectoryName,
PULARGE_INTEGER lpFreeBytesAvailableToCaller,
PULARGE_INTEGER lpTotalNumberOfBytes,
PULARGE_INTEGER lpTotalNumberOfFreeBytes
);

初始化成
ULARGE_INTEGER pFreeBAvailableToCaller;
ULARGE_INTEGER pTotalNuOfBytes;
ULARGE_INTEGER lpTotalNuOfFreeBytes;
是能返回正确值的

初始化成
PULARGE_INTEGER pFreeBAvailableToCaller;
PULARGE_INTEGER pTotalNuOfBytes;
PULARGE_INTEGER lpTotalNuOfFreeBytes;
就不能返回正确值

Tomaslee 2006-03-26
  • 打赏
  • 举报
回复
但是 我 用
GetDiskFreeSpaceEx(
_T("\\SD Disk"),
lpFreeBAvailableToCaller,
lpTotalNuOfBytes,
NULL))
函数为什么得到的是0呢?
你能把你尝试的 函数的代码部分 分享 一下么?
红牛哥110 2006-03-25
  • 打赏
  • 举报
回复
上面说是你代码的问题,我是猜的.你按上面和下面的方法检测一下,看你的Device到底支不支持吧.

还有一种更简单的方法,就是在你的设备上,查看 SD Disk的属性,如果能显示出已使用的磁盘空间和剩余的空间,那说明肯定支持.
红牛哥110 2006-03-25
  • 打赏
  • 举报
回复
是你的代码的问题,不是不支持的问题.

如果你想知道OEM支不支持,你可以在相应的SDK的帮助中,查找,如果能找到这个函数的帮助,
说明肯定是支持的.
Tomaslee 2006-03-25
  • 打赏
  • 举报
回复
BOOL WINAPI GetStoreInfo(
HANDLE hStore,
PSTOREINFO pStoreInfo
);
HRESULT GetStoreInfo(
PSTOREINFO pInfo);
BOOL GetDiskFreeSpaceEx(
LPCWSTR lpDirectoryName,
PULARGE_INTEGER lpFreeBytesAvailableToCaller,
PULARGE_INTEGER lpTotalNumberOfBytes,
PULARGE_INTEGER lpTotalNumberOfFreeBytes );

在MSDN上都有下面这句话
“Note This API is part of the complete Windows CE OS package as provided by Microsoft. The functionality of a particular platform is determined by the original equipment manufacturer (OEM) and some devices may not support this API.

那么
1怎么样确定OEM做的系统里面支不支持这个函数?
2如果不支持怎么办?

我大致看了一下系统驱动里面的源代码文件,好象没找到这几个函数。




红牛哥110 2006-03-25
  • 打赏
  • 举报
回复
Remarks
The values obtained by this function are of type ULARGE_INTEGER. Be sure not to truncate these values to 32 bits.

红牛哥110 2006-03-24
  • 打赏
  • 举报
回复
介绍一下API函数GetDiskFreeSpaceEx的参数,它的原型如下:
GetDiskFreeSpaceEx(
LPCTSTR lpDirectoryName, // 指明哪个磁盘
PULARGE_INTEGER lpFreeBytesAvailableToCaller, // 返回当前用户可使用的自由空间PULARGE_INTEGER lpTotalNumberOfBytes, //磁盘总容量-----这个值就是你想要的吧
PULARGE_INTEGER lpTotalNumberOfFreeBytes //设置为NULL

返回的单位为字节数.

到了这一步应当差不多了吧.呵呵
红牛哥110 2006-03-24
  • 打赏
  • 举报
回复
你在网上随便查一下,不就知道了吗
GetDiskFreeSpaceEx()
红牛哥110 2006-03-24
  • 打赏
  • 举报
回复
to aaazxd(量天):
你乱说,msdn上哪里说不支持了.

我试了两个小时,终于成功了,发现我上面对函数的说明搞错了,唉这都怪MS.


呵呵,楼主可不可以多开点分呀.
aaazxd 2006-03-24
  • 打赏
  • 举报
回复
楼主,我跟你碰到相同的问题呢,msdn上说GetDiskFreeSpaceEx函数不支持ce,
用什么函数(vc跟c#都可以的)能够支持在ce下的磁盘空间大小的查询呢?~
载舟之水 2006-03-24
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcedata5/html/wce50grfstoragemanagerfunctions.asp
Tomaslee 2006-03-24
  • 打赏
  • 举报
回复
CStatic m_Text_Size;
………..
PULARGE_INTEGER lpFreeBAvailableToCaller=0;
PULARGE_INTEGER lpTotalNuOfBytes=0;
CString strForMatName=_T("");
if(::GetDiskFreeSpaceEx(
_T("\\SD Disk"),
lpFreeBAvailableToCaller,
lpTotalNuOfBytes,
NULL))
{ strForMatName.Format(_T("%d"),lpTotalNuOfBytes);
m_Text_Size.SetWindowText(strForMatName);
RETAILMSG(1,(TEXT("PASS ? ")));
}

得到的结果是 0.
单步调试的时候, 怀疑是路径不对。
这个硬件对应在WinCE.NET4.2里面的名字是 文件夹SD Disk
我试过
_T("\\SD Disk"),
_T("\\SD Disk\\"),
_T("SD Disk"),
都失败了。
能否告之第一个参数怎么用。
aaazxd 2006-03-24
  • 打赏
  • 举报
回复
不行啊,楼上的,这个函数好像不支持CE下的使用吧?

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧