Einzelnen Beitrag anzeigen

th_bone

Registriert seit: 16. Jun 2004
172 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Tfilestream mit anderem Process sharen.. ?

  Alt 15. Feb 2006, 17:40
Hi,

hmm irgenwie kriege ich es nicht hin... der zugriff wird immer verweigert da ein process darauf zugreift..

habe ich einen denkfehler drin ?

Danke

Ralf

hier mal mein testcode:

Prog1: der die streams dynamisch erstellt und anschließend die streams mit testdaten befüllt

Delphi-Quellcode:
var
  Form1: TForm1;
  mystream: array[1..100] of Tfilestream;

implementation

{$R *.dfm}

// Streams dynamisch createn
procedure TForm1.Button1Click(Sender: TObject);
var
 i, i2: integer;
 len: byte;
filename: string;
begin
  for i:=1 to 100 do begin
    filename:='D:\__test\'+inttostr(i)+'.dat';
    // stream createn oder öffnen und lesezugriffe zulassen
    if not fileexists(filename) then mystream[i]:=Tfilestream.create(filename, fmCreate or fmsharedenynone)
      else mystream[i]:=Tfilestream.create(filename, fmOpenreadwrite or fmsharedenynone);
     mystream[i].Position:=mystream[i].Size;
  end;

  // testdaten in alle streams schreiben
  len:=123;
  // Testschleife die abwechselnd '123' in jeden stream[1..100] schreibt
  for i2:=1 to 100000 do begin
    for i:=1 to 100 do begin
      with mystream[i] do begin
        write(len, sizeof(byte));
      end;
    end;
  end;

  // streams freigeben
  for i:=1 to 100 do mystream[i].free;
end;
Prog2: und hier der versuch mit einem 2ten prog auf den ersten offenen stream während des schreibens zuzugreifen

Delphi-Quellcode:
var
  Form1: TForm1;
  mystream: tfilestream;

implementation

{$R *.dfm}

procedure TForm1.cxButton1Click(Sender: TObject);
var
  len : byte;
begin
  mystream:=tfilestream.create('d:\__test\1.dat', fmopenread or fmsharedenynone);
  mystream.Position:=0;

  mystream.Read(len, sizeof(len));
  // ergebnis im memo anzeigen
  cxmemo1.Lines.add(inttostr(len));
  mystream.free;
end;
  Mit Zitat antworten Zitat