jak skopiowac plik txt albo wydobyć z niego tekst ??

utrudnienia jakie mam w funkcji to takie że jak program dziala i zapisuje tekst z aplikacji konsolowej do pliku podczas gdy jest ta aplikacja uruchomiona :/ to uchwyt pliku w którym jest zapisywany tekst z konsoli programu jest otwarty i niemoge kopiować sobie na bieżąco :/ zawartości :/

function RunCaptured(const _dirName, _exeName, _cmdLine, nazwa_pliku: string; tworz_raport: Boolean): Boolean;
var
   start: TStartupInfo;
   procInfo: TProcessInformation;
   tmpName: string;
   tmpSec: TSecurityAttributes;
   return: Cardinal;
begin
   Result := False;
   try
{ tmpName to plik w którym zostaną zapisane dane z aplikacji konsolowej }
{ jeżeli wartosc tworz_raport będzie prawdą, jest to także plik tymczasowy }
      tmpName := nazwa_pliku;
      FillChar(tmpSec, SizeOf(tmpSec), #0);
      tmpSec.nLength := SizeOf(tmpSec);
      tmpSec.bInheritHandle := True;
      tmp := Windows.CreateFile(PChar(tmpName),
               GENERIC_WRITE, FILE_SHARE_READ and FILE_SHARE_WRITE,
               @tmpSec, Create_Always, File_Attribute_Normal, 0);
               //@tmpSec
               //GENERIC_READ and
      try
         FillChar(start, SizeOf(start), #0);
         start.cb           := SizeOf(start);
         start.hStdOutput   := tmp;
         start.dwFlags      := StartF_UseStdHandles or StartF_UseShowWindow;
         start.wShowWindow := SW_Minimize;
         { Start programu konsolowego }
         if CreateProcess(nil, PChar(_exeName + ' ' + _cmdLine), nil, nil, True,
                                 DETACHED_PROCESS, nil, PChar(_dirName), start, procInfo) then
         begin

            SetPriorityClass(procInfo.hProcess, Idle_Priority_Class);
            //WaitForSingleObject(procInfo.hProcess, Infinite);
            WaitForMultipleObjects(1, start.lpDesktop, true, 5);
            GetExitCodeProcess(procInfo.hProcess, return);
            Result := (return = 0);
            CloseHandle(procInfo.hThread);
            CloseHandle(procInfo.hProcess);
            Windows.CloseHandle(tmp);
            { Dodawanie wyniku aplikacji do komoponntu TMemo }
            res := TStringList.Create;
            try
               res.LoadFromFile(tmpName);
               Form1.Memo1.Lines.AddStrings(res);
            finally
               res.Free;
            end;
            { jeżeli plik tymczasowy nie potrzebny to go usuń }
            if tworz_raport = false then
            Windows.DeleteFile(PChar(tmpName));
         end
         else
         begin
         { w razie problemów wyswietl komunikat }
            Application.MessageBox(PChar(SysErrorMessage(GetLastError())),
               'Błąd uruchomienia aplikacji konsolowej!', MB_OK);
         end;
      except
         Windows.CloseHandle(tmp);
         { jeżeli plik tymczasowy nie potrzebny to go usuń }
         if tworz_raport = false then
         Windows.DeleteFile(PChar(tmpName));
         raise;
      end;
   finally
   end;
end;