Autor Beitrag
NeMeZ
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

Win7
Delphi10
BeitragVerfasst: Mo 25.04.11 09:21 
Hallo Leute,

habe folgendes Problemm, die Resources, die ich in eine EXE gesteckt habe, möchte ich in einem bestimmten Ordner speichern und bekomme immer wieder fehlermeldung

Screenshot

und was ich geschrieben hab'.....


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button1Click(Sender: TObject);
var Save : TSaveDialog;
begin
 with TResourceStream.Create(hInstance, 'exe1', RT_RCDATA) do
 try
 save := TsaveDialog.Create(Self);
if save.Execute then
begin
Save.InitialDir :=ExtractFilePath(edit1.Text);
Seek(0, soFromBeginning);
SaveToFile(save.InitialDir);
end;

finally
Free;
end;

end;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Bild als Anhang hochgeladen.
Einloggen, um Attachments anzusehen!
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 25.04.11 10:10 
Mach mal statt SaveToFile ein Showmesssage....
ausblenden Delphi-Quelltext
1:
SaveToFile(save.InitialDir)					

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: Mo 25.04.11 11:04 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
Mach mal statt SaveToFile ein Showmesssage....
ausblenden Delphi-Quelltext
1:
SaveToFile(save.InitialDir)					
Ja, denn da wird wohl der Dateiname an sich fehlen. ;)

_________________
Nein, ich bin nicht der turboPASCAL aus der DP, ich seh nur so aus... :P
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 25.04.11 11:34 
@turboPASCAL
Spielverderber ;-)

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
NeMeZ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

Win7
Delphi10
BeitragVerfasst: Mo 25.04.11 11:43 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
Mach mal statt SaveToFile ein Showmesssage....
ausblenden Delphi-Quelltext
1:
SaveToFile(save.InitialDir)					



witzbold.....

vielleicht passiert das weil ich Win7 habe, UAC *mist*e z.B.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 25.04.11 12:05 
sicher nicht, lies doch mal die Fehlermeldung genau...
Etwas in der Art D:\Dateiname.endung wäre hilfreich....

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 25.04.11 13:06 
user profile iconNeMeZ hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if save.Execute then
begin
Save.InitialDir :=ExtractFilePath(edit1.Text);
Seek(0, soFromBeginning);
SaveToFile(save.InitialDir);
end;
Fassen wir mal zusammen:
Du zeigst zuerst den Dialog an. Der Benutzer wählt einen Dateinamen aus, in dem gespeichert werden soll.
Dann nachdem der Dialog bereits angezeigt war setzt du die Eigenschaft, welcher Pfad zuerst bei der Anzeige des Dialogs ausgewählt sein soll auf den Pfad in Edit1.Text.
Und am Ende speicherst du in diesen von dir selbst gerade zugewiesenen Pfad. :shock: Wofür eigentlich der Dialog, wenn der vom Benutzer ausgewählte Dateiname ohnehin verworfen wird?!?

Was du machst geht viel einfacher zu schreiben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TResourceStream.Create(hInstance, 'exe1', RT_RCDATA) do
  try
    Seek(0, soFromBeginning);
    SaveToFile(ExtractFilePath(edit1.Text));
  finally
    Free;
  end;
end;
Und dass es nicht klappt, wenn du an SaveToFile den Pfad aus dem Dateinamen in Edit1.Text übergibst, ist wohl irgendwie logisch, oder?

Was willst du jetzt wirklich machen? Einen Dateinamen über den Dialog vom Benutzer erfragen und dort speichern? Dann solltest du auch die Eigenschaft FileName des Dialogs benutzen um dort zu speichern...
NeMeZ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

Win7
Delphi10
BeitragVerfasst: Mo 25.04.11 17:17 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconNeMeZ hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if save.Execute then
begin
Save.InitialDir :=ExtractFilePath(edit1.Text);
Seek(0, soFromBeginning);
SaveToFile(save.InitialDir);
end;
Fassen wir mal zusammen:
Du zeigst zuerst den Dialog an. Der Benutzer wählt einen Dateinamen aus, in dem gespeichert werden soll.
Dann nachdem der Dialog bereits angezeigt war setzt du die Eigenschaft, welcher Pfad zuerst bei der Anzeige des Dialogs ausgewählt sein soll auf den Pfad in Edit1.Text.
Und am Ende speicherst du in diesen von dir selbst gerade zugewiesenen Pfad. :shock: Wofür eigentlich der Dialog, wenn der vom Benutzer ausgewählte Dateiname ohnehin verworfen wird?!?



ich wollte eigentlich so machen, dass ich alle Resources in EXE, in einem ordner habe, als beispiel habe ich nur eine datei genommen, sollten aber mehrere sein....
Installer so zu sagen....
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 25.04.11 17:35 
Das ändert aber nichts daran, dass du keinen Dateinamen angibst und der SaveDialog zwar angezeigt, die Auswahl des Benutzers aber ignoriert wird.

Was willst du denn nun machen mit dem Dialog?
NeMeZ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

Win7
Delphi10
BeitragVerfasst: Di 26.04.11 15:58 
also, jetzt kann ich ein folder erstellen, aber die Resources wollen nicht darein.... so eine kake.... und savedialog(damit ich den ordner auswählen kann...) kann ich auch nicht reinprogrammieren kommt gleich eine fehlermeldung "zugriffverletzung"



ausblenden volle Höhe 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:
42:
43:
44:
45:
unit Unit1;

interface

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

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

var
  Form1: TForm1;
  edit1:Tedit;
  Dir: string;
implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
begin
 with TResourceStream.Create(hInstance, 'exe1', RT_RCDATA) do
 try
Dir := edit1.Text;
ForceDirectories(Dir);
Seek(0, soFromBeginning);
SaveToFile(dir);
finally
Free;
end;

end;

end.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.04.11 16:01 
user profile iconNeMeZ hat folgendes geschrieben Zum zitierten Posting springen:
also, jetzt kann ich ein folder erstellen, aber die Resources wollen nicht darein.... so eine kake.... und savedialog(damit ich den ordner auswählen kann...) kann ich auch nicht reinprogrammieren kommt gleich eine fehlermeldung "zugriffverletzung"
Der SaveDialog ist auch zur Auswahl einer Zieldatei, keines Ordners...
Dafür gibt es SelectDirectory.

user profile iconNeMeZ hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
 with TResourceStream.Create(hInstance, 'exe1', RT_RCDATA) do
 try
Dir := edit1.Text;
ForceDirectories(Dir);
Seek(0, soFromBeginning);
SaveToFile(dir);
finally
Free;
end;
Ist dir echt nicht klar, dass es einen Unterschied zwischen Dateien und Ordnern gibt? :shock:

Was willst du damit bewirken, wenn du als Dateiname zum Speichern den Namen eines Ordners angibst? :nixweiss:

// EDIT:
:shock:
user profile iconNeMeZ hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var
  Form1: TForm1;
  edit1:Tedit;
  Dir: string;
implementation
Nicht nur, dass du Dir global deklarierst, warum auch immer... :autsch:
Nein, du deklarierst auch noch eine Variable Edit1 zusätzlich. :shock: Warum?
NeMeZ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

Win7
Delphi10
BeitragVerfasst: Di 26.04.11 18:59 
Zitat:
Nein, du deklarierst auch noch eine Variable Edit1 zusätzlich. :shock: Warum?


in einer procedur wurde edit1 nicht anerkannt, wieso weiss ich nicht... :)

also, ich habe das heir geschrieben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  dir : string;
begin
  if SelectDirectory ('Select folder''', dir, [sdNewFolder, sdNewUI]) then
   edit1.Text:= dir;
end;


aber die daten aus der EXE kann ich immer noch nicht speichern.... da, wo ich das will....
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.04.11 19:04 
user profile iconNeMeZ hat folgendes geschrieben Zum zitierten Posting springen:
in einer procedur wurde edit1 nicht anerkannt, wieso weiss ich nicht... :)
Weil es eine Prozedur ist. Und keine Methode des Formulars. Den Unterschied siehst du, wenn du z.B. eine ButtonClick-Methode mit deiner Prozedur vergleichst.

user profile iconNeMeZ hat folgendes geschrieben Zum zitierten Posting springen:
also, ich habe das heir geschrieben:
Wenn du edit1 dort ein zweites Mal deklariert hast, wird auch diese Variable benutzt. Die ist aber nil, weil die nie einen Wert zugewiesen bekommen hat. Deshalb kommt eine Schutzverletzung, denn den Text von nichts kann man schlecht setzen. :zwinker:

user profile iconNeMeZ hat folgendes geschrieben Zum zitierten Posting springen:
aber die daten aus der EXE kann ich immer noch nicht speichern.... da, wo ich das will....
Hast du denn mittlerweile endlich zusätzlich zum Pfad einen Dateinamen angegeben?
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Di 26.04.11 19:09 
user profile iconNeMeZ hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
Nein, du deklarierst auch noch eine Variable Edit1 zusätzlich. :shock: Warum?


in einer procedur wurde edit1 nicht anerkannt, wieso weiss ich nicht... :)


Das passiert wenn du die Procedure nicht in der Klasse deiner Form deklarierst, so weiß dein Compiler nicht was edit1 ist.
Wenn du jetzt einfach ein neues TEdit deklarierst und es weder erstellst noch ihm einen Parent gibst, klappt es sowieso schonmal nicht.
Versuchs mal mit DeineForm.edit1, Dann wird es klappen.

Und wieso nimmst du nicht den Weg, den du oben schon angesprochen hast?
Ein paar Änderungen und es sollte klappen.
Mal ein Beispiel, an dem du den Unterschied zwischen Pfad und Pfad + Datei siehst.
Angenommen du hast ein Bild auf C:\, das TestBild heißt.
Wenn du jetzt in deinen Browser C:\ eingibst, dann öffnet er die die Partition, das Bild wird dir aber nicht angezeigt.
Wenn du jetzt soetwas wie C:\TestBild.bmp eingibst, passiert was anderes.
Kannst es ja mal ausprobieren.

lg