Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>You can try your luck with ReadFile WinAPI. On a shared read open mode, you'll be able to sneak and read the contents of the file at last file buffer flush. If that another application (Proxifier) opened the file with CreateFile WinAPI with FILE_SHARE_READ share mode then you'll be able to open it for reading, as long as you use ReadFile API. Standart LoadFromFile method won't work here if it still was opened for share, and you'll get the same 'lock' error.</p> <p>But here's the catch.. You'll have to deal with buffers, sizes and handles... You'll have to assing a handle to file for reading, get the file size with that handle, set an array with that size, do read to that array and assign, add (whatever) that array to the memo.. Pure usage of WinAPI. Some job for a simple task...</p> <p>Here is a basic example of how to deal with files with WinAPI:</p> <p>The key assumption of that other application's file open process:</p> <pre><code>var Form1: TForm1; logfile: Textfile; h: THandle; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin // AssignFile(logfile, 'c:\deneme.txt'); // Rewrite(logfile); h := CreateFile('C:\deneme.txt', GENERIC_WRITE, FILE_SHARE_READ, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); Timer1.enabled := true; end; procedure TForm1.Button2Click(Sender: TObject); begin Timer1.enabled := false; // CloseFile(logfile); CloseHandle(h); end; procedure TForm1.Timer1Timer(Sender: TObject); var str: AnsiString; p: pointer; buf: array of ansichar; written: cardinal; begin // Writeln(logfile, 'denemeStr'); str := 'denemeStr' + #13#10; p := pansichar(str); SetLength(buf, length(str)); move(p^, buf[0], length(str)); WriteFile(h, buf[0], length(buf), written, nil); FlushFileBuffers(h); end; </code></pre> <p>And if it's been shared for reading, this is how you can read from it:</p> <pre><code>procedure TForm1.Button1Click(Sender: TObject); var h: THandle; buf: array of ansichar; size, read: cardinal; begin Memo1.Lines.Clear; // Memo1.Lines.LoadFromFile('c:\deneme.txt'); h := CreateFile('C:\deneme.txt', GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); size := GetFileSize(h, nil); SetLength(buf, size); ReadFile(h, buf[0], size, read, nil); CloseHandle(h); Memo1.Lines.Add(pansichar(buf)); end; </code></pre> <p>Hope this'd help...</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload