Entwickler-Ecke

Dateizugriff - Dateiname als String in Typisierter Datei speichern


binco - Mo 13.06.05 21:14
Titel: Dateiname als String in Typisierter Datei speichern
Ich habe mir ein record geschrieben, wo 2 Dateinamen als Strings[255] enthalten sind...
Die Dateinamen werden über einen opendialog in das Record geschrieben. Dannach wird das komplette record in eine typisierte Datei gespeichert.
Das Problem is, dass alles ausser den Dateinamen gespeichert wird. Einzige Ausnahme: Wenn die Datei im selben Ordner liegt wie das Projekt...

Ich hoffe irgendjemand kann mir helfen

b1nc0


Narses - Mo 13.06.05 21:23

Moin und :welcome: im Forum!

Leider ist deine Fehlerbeschreibung ausreichend seltsam, dass wir wohl schon deinen Code sehen müssen, um was dazu sagen zu können. :wink:

cu
Narses


Muetze1 - Mo 13.06.05 22:12

Moin!

Mit anderen Worten: die Pfadangaben sind länger als 255 Zeichen? Naja, ich sehe da 2 Lösungen:

1. Du speicherst nur den Dateinamen ohne Pfad (Stichwort: ExtractFileName())
2. Du steigst von typirisierten Dateien um zu einem TFileStream und speicherst darin keine ShortStrings sondern echte Strings in ihrer wahren Länge (also bis 2GB Länge).

MfG
Muetze1


binco - Mi 15.06.05 09:35
Titel: Hier der Quelltext

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var f:textfile;
    a:string[255];
begin
if opendialog1.execute then
begin
     a:=opendialog1.filename;
     assignfile(f,'config.cfg');
     rewrite(f);
     write(f,a);
     closefile(f);
end;
end;

end.


Hier hab ich einen kurzen Quelltext zusammengestellt.
Wenn die zu speichernde Datei im selben Verzeichnis liegt funzt alles einwandfrei, sonst speichert er nichts. Wenn ich den Dateinamen von Hand in ein Edit eingebe und speicher funzt auch alles.
Ich hoffe irgendjemand kennt dieses Problem...


Martin1966 - Mi 15.06.05 10:08

hallo!

ich hab deinen geposteten Code ausprobiert und es funktioniert. was du aber machen solltest: gib das Verzeichnis an wo die config.cfg gespeichert werden soll. ich hatte zum testen einfach c:\config.cfg benutzt. in deinem fall soll die config.cfg wahrscheinlich in deinem programmverzeichnis liegen, oder? wenn ja dann hole dir das programmverzeichnis mit paramstr(0) und extractfilepath und packe dieses verzeichnis vor dem config.cfg.

lg martin