function InternalGetDiskSpace(Drive: Byte;
var TotalSpace, FreeSpaceAvailable: Int64): Bool;
var
RootPath: array[0..4] of Char;
RootPtr: PChar;
begin
RootPtr := nil;
if Drive > 0 then
begin
RootPath[0] := Char(Drive + $40);
RootPath[1] := ':';
RootPath[2] := '\';
RootPath[3] := #0;
RootPtr := RootPath;
end;
[red]Result := GetDiskFreeSpaceEx(RootPtr, FreeSpaceAvailable, TotalSpace, nil);[/red]
end;function DiskFree(Drive: Byte): Int64;
var
TotalSpace: Int64;
begin
if not InternalGetDiskSpace(Drive, TotalSpace, Result) then
Result := -1;
end;
当用调用diskfree(0),是返回当前盘的磁盘剩余容量,但看程序中,如果实际参数是0,在diskfree中,形式参数drive值为0,在调用internalGetDiskSpace()函数时,其形式参数drive值为0,那么红色语句中RootPtr值为nil,但API函数GetDiskFreeSpaceEx定义中,Rootptr是为String,这怎么理解这个函数调用呢?
是不是这里的RootPtr是为一个以nil为结束符的空字符串?(另外,还请问一下,String是以nil结束的字符串,而Pchar不以nil结束的字符串吗?)还请各位高手指点一下,谢谢!
var TotalSpace, FreeSpaceAvailable: Int64): Bool;
var
RootPath: array[0..4] of Char;
RootPtr: PChar;
begin
RootPtr := nil;
if Drive > 0 then
begin
RootPath[0] := Char(Drive + $40);
RootPath[1] := ':';
RootPath[2] := '\';
RootPath[3] := #0;
RootPtr := RootPath;
end;
[red]Result := GetDiskFreeSpaceEx(RootPtr, FreeSpaceAvailable, TotalSpace, nil);[/red]
end;function DiskFree(Drive: Byte): Int64;
var
TotalSpace: Int64;
begin
if not InternalGetDiskSpace(Drive, TotalSpace, Result) then
Result := -1;
end;
当用调用diskfree(0),是返回当前盘的磁盘剩余容量,但看程序中,如果实际参数是0,在diskfree中,形式参数drive值为0,在调用internalGetDiskSpace()函数时,其形式参数drive值为0,那么红色语句中RootPtr值为nil,但API函数GetDiskFreeSpaceEx定义中,Rootptr是为String,这怎么理解这个函数调用呢?
是不是这里的RootPtr是为一个以nil为结束符的空字符串?(另外,还请问一下,String是以nil结束的字符串,而Pchar不以nil结束的字符串吗?)还请各位高手指点一下,谢谢!
解决方案 »
- 数据存储问题
- THashedStringList 查询结构体
- 求救高手!!! 有关delphi 的停靠技术的问题
- 大家帮我看看这条查询语句有什么错误啊,有时候查询结果是正确的,有时是错误的,谢谢!
- vclskin控件使用的问题
- 本人招租-想换个工作地点
- 猩猩哥哥,请加我QQ 94215 或者回帖我加你的55 搞不明白了
- 救急---关于Delphi 的CD Key
- 30分,谁来谁拿
- 各位兄弟,我开发的三层的应用设计阶段已经完成,却被服务器配置卡住了,大家拉一把兄弟呀!
- 请问如何把网上的网页抓下来?
- 我用AssignFile(f,'lpt1')实现打印(向lpt1端口发送字符),可是字体的大小、样式怎么用程序来控制呢?
var
RootPtr: String;
begin
RootPtr := Chr(Drive + $40) + ':\';
Result := GetDiskFreeSpaceEx(PChar(RootPtr), FreeSapceAvailable, TotalSpace, nil);
end;PChar 是以 #0 结束的,正如你想象的那样。