EXE + TXT ?!

0

Potrzebuję czegoś takiego:
Mam swój program napisany w delphi, skompilowany do exe .Mam też jakieś dane w pliku txt. Potrzebuję dołączyć do tego execa (za pomocą innego mojego programu) plik txt, a następnie móc odczyctać te dane. Komp[letnie nie mam pomysłu, jak to zrobić. Z góry dziękuję za pomoc.

0

Nie mozesz w fazie projektowania wrzucic zawartosci do memo a potem normalnie to odczytywac, to najprostszy sposob dodawania zasobow :)

// w takim razie masz to w FAQ. mozesz zapisac to jako komentarze do programu, inaczej sie raczej nie da

0

Nie, chyba źle mnie zrozumiałeś. Oto co mam:

  1. Plik "Program1.exe"
  2. Plik "Połącz.exe"
  3. Plik "Dane.txt"
    Odpalam program "Połącz.exe" i w rezultacie do pliku "Program1.exe" dopisują się na końcu informacje z "Dane.txt". Dopisują się w taki sposób, żebym mógł to potem z Program1.exe odczytać.
0

No to musisz poznać budowę pliku exe, albo na końcu dorzucić jeszcze rozmiar odczytywanych danych.

0

Tradycyjny przykład użycia zasobów. Poczytaj w FAQu, chyba pod hasłem "jak dodać jakiś plik do mojego programu" albo cos takiego. W kodzie programu wyciagniecie pliku to pare linijek, a zasoby mozesz dodac tworzac drugi plik .res (restoratorem lub Borland resource compiler), albo dodajac zasoby do gotowego exe popularnym programem ResourceHacker :).

0

yyy, chyba mnei wylogowalo :P Kto zjadl mi ciasteczka?! :P

0

Najpierw zajrzyj tutaj a dopiero potem otworz linka ponizej :P
http://swwweet.w.interia.pl/bart.jpg

http://4programmers.net/view_faq.html?id=367

0

tysiące razy bylo poruszane na forum !

0

Zapis:
najłatwiej jest dopisać do pliku na jego końcu potrzebmna dane a jako ostatnie 4 bajty dodać długość ciągu (wielkość pliku).
Odzczyt:
czytasz ost 4 bajty i odejmujesz wartość zapisaną w nich plus 4 od wielkości pliku exe a następnie skaczesz do tego miejsca i czytasz do miejsca końca pliku minus 4 bajty

0

Cytuje:

"

function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean; 
var 
  aStream: TFileStream; 
  iSize: Integer; 
begin 
  Result := False; 
  if not FileExists(AFileName) then 
    Exit; 
  try 
    aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite); 
    MemoryStream.Seek(0, soFromBeginning); 
    // seek to end of File 
    // ans Ende der Datei Seeken 
    aStream.Seek(0, soFromEnd); 
    // copy data from MemoryStream 
    // Daten vom MemoryStream kopieren 
    aStream.CopyFrom(MemoryStream, 0); 
    // save Stream-Size 
    // die Streamgröße speichern 
    iSize := MemoryStream.Size + SizeOf(Integer); 
    aStream.Write(iSize, SizeOf(iSize)); 
  finally 
    aStream.Free; 
  end; 
  Result := True; 
end; 

function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean; 
var 
  aStream: TFileStream; 
  iSize: Integer; 
begin 
  Result := False; 
  if not FileExists(AFileName) then 
    Exit; 

  try 
    aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite); 
    // seek to position where Stream-Size is saved 
    // zur Position seeken wo Streamgröße gespeichert 
    aStream.Seek(-SizeOf(Integer), soFromEnd); 
    aStream.Read(iSize, SizeOf(iSize)); 
    if iSize > aStream.Size then 
    begin 
      aStream.Free; 
      Exit; 
    end; 
    // seek to position where data is saved 
    // zur Position seeken an der die Daten abgelegt sind 
    aStream.Seek(-iSize, soFromEnd); 
    MemoryStream.SetSize(iSize - SizeOf(Integer)); 
    MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize)); 
    MemoryStream.Seek(0, soFromBeginning); 
  finally 
    aStream.Free; 
  end; 
  Result := True;

end;
procedure TForm1.LoadClick(Sender: TObject);
var 
  aStream: TMemoryStream;
begin
if opendialog1.Execute
  then
   begin
  aStream := TMemoryStream.Create;
  LoadFromFile(opendialog1.FileName, aStream);
  Memo1.Lines.LoadFromStream(aStream);
  aStream.Free;
  end;
end;



{ 

Note: 

You can't proof whether additional data is attached or not. 
To reach this, you would have to create a checksumm of the 
MemoryStream and attach it. 


Hinweis: 

Es kann nicht überprüft werden ob zusätzliche Daten in der Datei 
vorhanden sind. Um das zu erreichen müsste man eine Checksumme des MemoryStreams 
erzeugen und ebenfalls anhängen. 

} 



procedure TForm1.SaveClick(Sender: TObject);
var
  aStream: TMemoryStream;
begin
if savedialog1.Execute then
   begin
  aStream := TMemoryStream.Create;
  Memo1.Lines.SaveToStream(aStream);
  AttachToFile(savedialog1.FileName, aStream);
  aStream.Free;
  end;
end;

end.

"

....

1 użytkowników online, w tym zalogowanych: 0, gości: 1