AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

EFcreateError Hilfe!

Ein Thema von Defe · begonnen am 10. Mai 2012 · letzter Beitrag vom 12. Mai 2012
Antwort Antwort
Defe

Registriert seit: 10. Mai 2012
3 Beiträge
 
#1

EFcreateError Hilfe!

  Alt 10. Mai 2012, 22:01
Hallo Leute ich bin ein ziemlicher Neuling in Sachen programmieren (9Monate Programmiererfahrung durch Schule) und habe vor kurzem ein für mich etwas größeres Projekt begonnen.

Dieses Projekt ist ein Vokabeltrainer doch schon gleich bei dem speichern von der Vokabel-Textdatei komme ich nicht mehr weiter...
Das Problem ist wie oben beschrieben ein EFCreateError, der mir nicht erlaubt die Textdatei zu erstellen.

Jetzt meine Frage:
Ist es richtig, dass dieser nur auftaucht wenn
a) ich nicht die Berechtigung dazu habe
b) Pfad oder Dateiname falsch sind
c) Datei nicht überschreibbar ist

Denn diese 3 Aspekte habe ich sorgfältigst überprüft (bin übrigens Administrator an meinem Pc)
Ich sitze mittlerweile knappe 10Stunden an dem einen Problem, weshalb ich mich auch jetzt an dieses Forum gewand habe...

Hier noch ein Ausschnitt des Quelltexts:

------------------------------------------------------------
Delphi-Quellcode:
var i:integer; part:char; back,ok,pathlang1,pathlang2:string;
begin
 voka1.Clear;
 voka2.clear;
 path.clear;

 for i:=1 to stringgrid1.rowcount-1 do
  begin
   voka1.add(stringgrid1.cells[1,i]);
   voka2.add(stringgrid1.cells[2,i]);
  end;
 voka1.add('///END///');
 voka2.add('///END///');

 savedialog1.execute;

 back:='';
 i:=length(savedialog1.filename);
 while not (savedialog1.filename[i]='\') do
  begin
   part:=savedialog1.filename[i];
   back:=back+part;
   i:=i-1;
  end;

 ok:='';
 for i:=length(back) downto 1 do
  ok:=ok+back[i];
  edit1.text:=ok;

 path.add('Vokabellisten\'+lang1+'\'+ok);
 path.add('Vokabellisten\'+lang2+'\'+ok);
 path.add(lang1);
 path.add(lang2);
 path.savetofile(savedialog1.filename);
 pathlang1:='Vokabellisten\'+lang1+'\'+ok;
 pathlang2:='Vokabellisten\'+lang2+'\'+ok;
 voka1.savetofile(pathlang1);
 voka2.savetofile(pathlang2);
----------------------------------------------

die Stringlisten voka1 und voka2 lassen sich nicht abspeichern, beide wurden bei der formcreate-Prozedur mit voka1:=Tstringlist.create;
aufgerufen und in den Unit-Variablen deklariert.Bild vom Fehler befindet sich im Anhang...

Danke schon im Voraus
Miniaturansicht angehängter Grafiken
fehler2.jpg   fehler.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.064 Beiträge
 
Delphi 12 Athens
 
#2

AW: EFcreateError Hilfe!

  Alt 10. Mai 2012, 22:08
Zitat:
pathlang1:='Vokabellisten\'+lang1+'\'+ok
Arbeite niemals mit relativen Pfaden!

Nein, relative Pfade sind nicht relativ zum Verzeichnis wo die EXE liegt,
sondern sie liegen relativ zum aktiellen Arbeitsverzeichnis. (und das kann sich ändern, z.B. der FileDialog spielt gerne damit rum )

Tja, wenn du versuchst eine Datei in einem Verzeichnis zu speichern, welches nicht existiert, dann muß es zwangsläufig knallen.

Tipp: ExtractFilePath(ParamStr(0)) oder ExtractFilePath(Application.ExeName) z.B. siehe http://www.delphipraxis.net/168206-d...-new-post.html

So, wenn deine Pfade irgendwann mal stimmen (absolut sind), dann darfst du dir auch DirectorYExists, CreateDirectory oder ForceDirectories angucken, oder du erstellst die Verzeichnisstruktur außerhalb deines Programms. (z.B. manuell über den Explorer)



PS: SaveDialog1.Execute ist eine Funktion.
Drück mal auf Abbrechen und wundere dich dann, daß dennoch gespeichert wird, obwohl du es doch nicht mehr wolltest.

Zitat:
Delphi-Quellcode:
 back:='';
 i:=length(savedialog1.filename);
 while not (savedialog1.filename[i]='\') do
  begin
   part:=savedialog1.filename[i];
   back:=back+part;
   i:=i-1;
  end;
Das soll nicht zufällig ein Delphi-Referenz durchsuchenExtractFileName darstellen?

Delphi-Referenz durchsuchenReverseString
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (10. Mai 2012 um 22:17 Uhr)
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#3

AW: EFcreateError Hilfe!

  Alt 10. Mai 2012, 22:09
Du solltest keine relativen Pfade nutzen für voka1 und voka2 sondern zB ExtractFIlePath(Application.ExeName) + '\Vokabltrainer...' dann wird im aktuellen Order der EXE gespeichert.

Zudem solltest Du vorher prüfen ob das Verzeichnis existiert, es gibt zB die FUnktion ForceDirectories(<dein Pfad>) , die falls der Ordner nicht existiert , erzeugt.
Lars
  Mit Zitat antworten Zitat
Defe

Registriert seit: 10. Mai 2012
3 Beiträge
 
#4

AW: EFcreateError Hilfe!

  Alt 11. Mai 2012, 06:53
Danke Himitsu und Daywalker für die raschen Antworten

Euere Beiträge haben mir sehr geholfen, vor allem der
Code:
ExtractFIlePath(Application.ExeName)
Befehl...
Das das Speichern nicht abbrechbar war hatte ich nicht berücksichtigt und jetzt ebenfalls behoben
  Mit Zitat antworten Zitat
Defe

Registriert seit: 10. Mai 2012
3 Beiträge
 
#5

AW: EFcreateError Hilfe!

  Alt 11. Mai 2012, 16:31
achja das hatte ich überlesen, ja, das sollte es darstellen, aber wie schon gesagt bin noch relativ neu und kenne daher nur ein bruchteil der Befehle
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.064 Beiträge
 
Delphi 12 Athens
 
#6

AW: EFcreateError Hilfe!

  Alt 12. Mai 2012, 00:01
Nun kennst du es ja.

Neues kennengelernt zu haben, ist der Hauptgrund für einen Lernprozess.
Nur Wenige wissen alles sofort.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz