我想将一些数据记录存储到磁盘.我希望每个数据记录具有相同的大小,以便我可以快速计算并跳转到某个记录.所以,我将记录中唯一的字符串存储为chars数组:
type TFileNameIO = array[1..512] of Char;
Run Code Online (Sandbox Code Playgroud)
从磁盘读取字符串后,我的字符串内容如下:
c:\ windows#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0等
我想截断#0字符,我做这样的事情:
function GetFileName(DiskName: TFileNameIO): string;
VAR PC: PChar;
begin
SetString(Result, PChar(@DiskName), Length(DiskName)); <----- here Result is: c:\windows#0#0#0 etc
PC:= PChar(Result);
Result:= WideCharToString(PC);
end;
Run Code Online (Sandbox Code Playgroud)
还有更好的方法吗?
您可以PChar直接将null终止分配给String:
function GetFileName(DiskName: TFileNameIO): string;
begin
Result := PChar(@DiskName);
end;
Run Code Online (Sandbox Code Playgroud)
只需确保TDiskName始终包含空终止符.如果它可以完全填满没有null的字符,你将不得不这样做:
function GetFileName(DiskName: TFileNameIO): string;
var
Len, I: Integer;
begin
Len := 0;
For I := Low(DiskName) to High(DiskName) do
begin
if DiskName[I] = #0 then Break;
Inc(Len);
end;
SetString(Result, PChar(@DiskName), Len);
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2226 次 |
| 最近记录: |