Я хотел бы получить счетчик PendingFileRenameOperations, у меня есть следующий код ниже, но я продолжаю получать счетчик выше, чем фактическое число, установленное в реестре.
Например, с помощью функции ниже Iполучить счет (5), но есть только (2) в ожидании, или я получаю счет (11), но есть только (5) в ожидании.
Любая помощь будет принята с благодарностью.
function GetPendingFileRenameCount(): Integer;
const
PendingFileRenameOperationsKey = 'SYSTEM\CurrentControlSet\Control\Session Manager';
PendingFileRenameOperationsName = 'PendingFileRenameOperations';
var
Reg: TRegistry;
DataSize: Integer;
Buffer: string;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
Result := 0;
if Reg.OpenKeyReadOnly(PendingFileRenameOperationsKey) then
begin
DataSize := Reg.GetDataSize(PendingFileRenameOperationsName);
SetLength(Buffer, DataSize);
Reg.ReadBinaryData(PendingFileRenameOperationsName, Buffer[1], DataSize);
while (Pos(#0, Buffer) > 0) do
begin
Result := Result + 1;
Buffer := Copy(Buffer, Pos(#0, Buffer) + 1, Length(Buffer));
end;
end;
finally
Reg.Free();
end;
end;
ОБНОВЛЕНИЕ
Я должен был упомянуть, что я пытаюсь получить количество ожидающих удаления файлов.
ОБНОВЛЕНИЕ ВТОРОЕ
Вот что у меня естьв моем реестре:
\ ?? \ Z: \ Локальные настройки \ Интернет-файлы \ Content.IE5 \ index.dat # 0 # 0
\ ?? \ Z: \ Локальные настройки \Интернет-файлы \ Content.IE5 \ index.dat # 0 # 0
\ ?? \ Z: \ Local Settings \ Temp \ etilqs_vTXZjJASQeyi046Mjjig # 0 # 0
\ ?? \ Z: \Локальные настройки \ Temp \ etilqs_av9VVc5fw7Za76J12NTc # 0 # 0
\ ?? \ Z: \ Локальные настройки \ Интернет-файлы \ Content.IE5 # 0 # 0
\ ?? \ Z: \ LocalНастройки \ Интернет-файлы \ Content.IE5 #0 # 0
\ ?? \ Z: \ Локальные настройки \ Интернет-файлы \ Content.IE5 \ index.dat # 0! \ ?? \ z: \ test.fil # 0
\ ?? \ Z: \ Локальные настройки \ Интернет-файлы \ Content.IE5 # 0 # 0
\ ?? \ Z: \ Локальные настройки \ Интернет-файлы \ Content.IE5 \ index.dat # 0! \?? \ X: \ test.fil # 0
\ ?? \ Z: \ Локальные настройки \ Интернет-файлы \ Content.IE5 # 0 # 0
\ ?? \ Z: \Локальные настройки \ Интернет-файлы \ Content.IE5 \ index.dat # 0! \ ?? \ X: \ test.fil # 0
\ ?? \ Z: \ Локальные настройки \ Интернет-файлы \ Content.IE5# 0! \ ?? \ X: \ test.fil # 0 # 0
Строки с двойным нулем в конце - это файлы, которые будут удалены при следующей перезагрузке. Это те, которые я хотел быхотел бы получить количество (кроме самого последнего двойного нуля).Я действительно не уверен, как разобрать это, чтобы получить то, что я ищу.
Было бы так же просто, как просто добавить еще один # 0 в функцию Pos?
while (Pos(#0#0, Buffer) > 0) do
begin
Result := Result + 1;
Buffer := Copy(Buffer, Pos(#0#0, Buffer) + 1, Length(Buffer));
end;