Получить уведомление, если cmd.exe не может успешно переместить файл? - PullRequest
0 голосов
/ 06 января 2020

Я запускаю cmd.exe, чтобы переместить файл с правами администратора:

ThisParams := '/C move ' + '"' + ThisSourceFile + '"' + ' ' + '"' + ATargetFile + '"';
Winapi.ShellAPI.ShellExecute(0, 'runas', 'cmd.exe', PChar(ThisParams), '', Winapi.Windows.SW_HIDE);

К сожалению, ShellExecute всегда возвращает успех независимо от того, было ли действие move успешным или нет (действие перемещения не будет выполнено, например, если целевой файл существует и доступен только для чтения или если целевой диск защищен от записи).

Так как я могу получить уведомление, если move действие в вышеуказанном случае не удается?

1 Ответ

0 голосов
/ 06 января 2020

Возможно, вы можете использовать каналы и сгенерированный файл загрузки, например. переместить A.txt B.TXT> result.txt

procedure TForm1.Button1Click(Sender: TObject);
var
  stToDo: string;
  sl1 : TSTringList ;
  MyResult : boolean ;
begin
  stToDo := '/C move "C:\Users\awr\Desktop\D2\a.txt" "C:\Users\awr\Desktop\D2\b.txt" >C:\Users\awr\Desktop\D2\Result.txt';
  ShellExecute(Application.Handle, 'runas', 'cmd.exe' ,PChar(stToDo),'',  SW_HIDE);
  sl1 := TSTringList.create ;
  sl1.LoadFromFile('C:\Users\awr\Desktop\D2\Result.txt');
  MyResult := trim(sl1.text) <> '' ;
  sl1.Free ; 

Если сбой перемещения «result.txt» пуст

...