Autor Beitrag
Dotter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 18.02.03 21:32 
Ich habe eine ComboBox mit Dateien als Einträgen.
ausblenden Quelltext
1:
DeleteFile(Combobox.text);					

funkioniert nicht.
ausblenden Quelltext
1:
Deletefile('Datei');					

schon.

Im Watch [Combobox.text] steht haargenau der Name der eigentlich gelöscht werden soll. Aber nix is.

Bitte um Hilfe.

Moderiert von user profile iconTino: Code-Tags hinzugefügt.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Di 18.02.03 21:42 
Hallo,

steht in der Combobox nur der Dateiname oder der komplette Pfad und der Dateiname?
wenn du nur den dateinamen hast, kann sich das aktuelle Verzeichnis geändert haben und dann wird es nicht funktionieren.
Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Di 18.02.03 21:52 
Es gibt zwei Versionen von DeleteFile, eine Delphi Version und eine Api Version. Bei der Delphivesion ist es egal was du nimst. Bei der Api Version mußt du ein den String in PChar konvertieren. Bei Werten in '' ist es allerdings egal.
Dotter Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 18.02.03 21:56 
In der Combobox steht nur der Dateiname.

Wenn ich aber in der Löschprozedur den Dateinamen direkt in deletefile eingebe funkioniert es. Also kann sich das aktuelle Verzeichnis nicht geändert haben. Oder ?
Dotter Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 18.02.03 21:59 
OKi. Ich werde es probieren. Danke vorerst.
Dotter Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 18.02.03 23:30 
Sorry, ich kriegs nicht auf die Reihe. :roll:

Für einen kurzen Code wäre ich sehr dankbar.

Einfach einen Eintrag aus der Combobox als Datei löschen.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 19.02.03 01:40 
OK. Du willst Code? Kann ich dir geben, nur helfen wird er dir nicht.

ausblenden Quelltext
1:
2:
Combobox1.Text := 'C:\test.txt';  // nur damit was drinsteht
Windows.DeleteFile(Combobox1.Text);
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 19.02.03 01:46 
Ich stell man jetzt eine Frage: Was soll überhaupt der Blödsinn in eine Löschprozedur nur den Dateinamen anzugeben? Wie kommt man überhaupt drauf, daß sowas funktionieren könnte?

Was soll die Prozedur jetzt machen? "Naja, ich hab jetzt einen Dateinamen aber kein Pfad. Nicht schlimm. Ich suche mir einfach irgendeine Datei aus. Ist doch egal welche. Ich lösche einfach irgendwelche, hauptsache die Namen stimmen überein."

Mach das Löschen nochmal, nur gibt bitte diesmal auch einen Pfad an.

Die Sache mit dem aktuellen Verzeichnis würde ich garnicht weiterverfolgen. Das aktuelle Verzeichnis kann jede Zeit auch von anderen Programmen verändert werden. Ist noch etwas aus der guten alten DOS Zeit. In DOS Zeiten war das noch kein Problem. Damals lief immer nur ein Programm zur Zeit.
Dotter Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 19.02.03 02:44 
Luckie hat folgendes geschrieben:
OK. Du willst Code? Kann ich dir geben, nur helfen wird er dir nicht.

ausblenden Quelltext
1:
2:
Combobox1.Text := 'C:\test.txt';  // nur damit was drinsteht
Windows.DeleteFile(Combobox1.Text);


Toll. Soweit war ich auch schon.


Seltsam ist daß,

ausblenden Quelltext
1:
2:
3:
4:
5:
if FindFirst(Combobox.text,faAnyFile,sr)=0 then showmessage(sr.name); funktioniert.

aber

if FindFirst(Combobox.text,faAnyFile,sr)=0 then deletefile(sr.name); aber nicht.


Weder mit oder ohne Pfad..... weder Windows.deletefile(pchar(.... )) oder deletefile(...)
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 19.02.03 05:27 
Anfänger die Fragen stellen wie man Dateien löscht machen mich immer nervös. Um so nervöse werde ich wenn ich merke, daß man mit TSearchRec arbeitet (d.h. alle Daten eines Ordners löschen will). Aber das heißt noch lange nichts und muß kein böses Vorhaben sein.

Dotter hat folgendes geschrieben:
Toll. Soweit war ich auch schon.


Nein, so weit wars du nicht. Du hast weder das verstanden was ich geschrieben habe, noch das was Luckie geschrieben hat.

Dotter hat folgendes geschrieben:
Seltsam ist daß,

ausblenden Quelltext
1:
2:
3:
4:
5:
if FindFirst(Combobox.text,faAnyFile,sr)=0 then showmessage(sr.name); funktioniert.

aber

if FindFirst(Combobox.text,faAnyFile,sr)=0 then deletefile(sr.name); aber nicht.


Weder mit oder ohne Pfad..... weder Windows.deletefile(pchar(.... )) oder deletefile(...)


Das kannst du garnicht vergleichen. ShowMessage zeigt nur ein String an. Solange es ein String ist, solange gibt es keine Fehlermeldung. DeleteFile braucht einen Dateinamen mit Pfad. Daß dieser als String übergeben wird ist nebensächlich. Ohne Pfad keine Löschaktion. Allerdings wehrst dich sehr dagegen es zu akzeptieren.

Ich gebe dir eine Zeile mit der du experimentieren kannst. Vielleicht verstehst du dann mehr was ich meine:

ausblenden Quelltext
1:
2:
3:
if FileExists(Dateiname) 
then ShowMessage('Datei existiert') 
else ShowMessage('Datei existiert nicht oder konnte nicht gefunden werden.');
Dotter Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 19.02.03 06:06 
Soweit war ich tatsächlich schon. Es war der erste Versuch. Und ich kann es mir nicht Erklären warum es nicht funzt obwohl es funzen sollte. Deshalb auch der Post.




ausblenden Quelltext
1:
2:
3:
4:
5:
windows.deletefile(pchar('c:\programme\Borland\Delphi7\Projects\'+ComboBox.text));

oder so :

deletefile('c:\programme\Borland\Delphi7\Projects\'+Combobox.text);


Funktionieren beide NICHT.


Übrigens. Die Einträge in der Combo sind Makros die ich dann in ein Richedit lade. Alles funktioniert bestens. Editieren, Neue Erzeugen und Löschen... aber halt nicht physikalisch. Das Programm ist sogut wie fertig und ist ein spezieller FTP Client. Ist auch nicht gaaanz so wichtig, andernfalls mache ich halt nur 20 Editierbare mit festen Namen. Sollte Ausreichen.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 19.02.03 10:58 
Wenn das so weiter geht, fange ich wieder an Basic zu programmieren. :evil:

Also erstmal. Du wolltest Code und den habe ich dir gegeben. Habe aber auch extra dazu geschrieben, dass er dir nicht weiterhelfen wird.

Zweites wäre es äußerst hilfreich, wenn du endlich mal mit einer Fehlermeldung rausrücken würdest.

Ein letzter Versuch dir zu helfen:
ausblenden Quelltext
1:
  DeleteFile(PChar('c:\programme\Borland\Delphi\Projects\'+Combobox1.Text));					
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 19.02.03 11:14 
Popov hat folgendes geschrieben:
Ich stell man jetzt eine Frage: Was soll überhaupt der Blödsinn in eine Löschprozedur nur den Dateinamen anzugeben?

Was ist denn so blöd daran eine Datei im aktuellen Arbeitsverzeichnis zu löschen?
Popov hat folgendes geschrieben:
Wie kommt man überhaupt drauf, daß sowas funktionieren könnte?

Wie kommst Du drauf das es nicht funktioniert? Also bei mir löscht er die Datei.
Popov hat folgendes geschrieben:
Was soll die Prozedur jetzt machen? "Naja, ich hab jetzt einen Dateinamen aber kein Pfad. Nicht schlimm. Ich suche mir einfach irgendeine Datei aus. Ist doch egal welche. Ich lösche einfach irgendwelche, hauptsache die Namen stimmen überein."

Siehe oben. Er löscht die Datei im Arbeitsverzeichnis.

Popov hat folgendes geschrieben:
Das aktuelle Verzeichnis kann jede Zeit auch von anderen Programmen verändert werden.

Ich war mir nicht sicher ob das wirklich so ist und habe deshalb eine Anwendung gestartet und eine weitere Instance dieser Anwendung über eine Verknüpfung gestartet. In der Verknüpfung habe ich ein anderes Arbeitsverzeichnis angegeben. Beide gestarteten Anwendungen haben angeblich ihr eigenes Verzeichnis. Denn beide haben die richtige Datei gelöscht.

Popov hat folgendes geschrieben:
DeleteFile braucht einen Dateinamen mit Pfad. Daß dieser als String übergeben wird ist nebensächlich. Ohne Pfad keine Löschaktion.

Wie gesagt: Bei mir funktioniert es auch wenn ich keine Verzeichnis angebe!

Luckie hat folgendes geschrieben:
Wenn das so weiter geht, fange ich wieder an Basic zu programmieren. :evil:

Gehört das jetzt zum Thema? :evil: Aber die Entscheidung kann Dir hier keiner Abnehmen.

Gruß
TINO
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Mi 19.02.03 11:31 
Hallo

@Tino: setzt mal einen Opendialog mit ein, starte ihn, nimm ein anderes Verzeichnis und dann versuch mal die Datei zu löschen, bzw. mit fileexist prüfen. geht nicht...

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 19.02.03 11:39 
Keldorn hat folgendes geschrieben:
setzt mal einen Opendialog mit ein, starte ihn, nimm ein anderes Verzeichnis und dann versuch mal die Datei zu löschen, bzw. mit fileexist prüfen. geht nicht...

Hab ich etwas anderes behauptet? Ich habe geschrieben das die Datei im aktuellen Arbeitsverzeichnis gelöscht wird. Das sich das Arbeitsverzeichnis durch den OpenDialog ändern kann weiß ich! Aber das ändert nichts an der Tatsache das es funktioniert.

Gruß
TINO
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 19.02.03 12:56 
Ich hab vor Jahren auch mit dem aktuellen Verzeichnis gearbeitet. Bei mir hat eine andere Anwendung das aktuelle Verzeichnis geändert. Dadurch wurde Daten gelöscht und verändert die nicht gelöscht und verändert werden sollten. Das Ende vom Lied war, daß ich mein Betriebssystem neu installieren durfte.

So wie meine Versuche gezeigt haben hat das aktuellen Arbeitsverzeichnis etwas mit dem aktuellen Arbeitsverzeichnis von DOS zu tun. Somit kann es jede Zeit verändert werden. Ich las mich aber gerne berichtigen.

Weiterhin hab ich nicht gesagt, daß es nicht möglich ist, ich hab nur gesagt das es Blödsinn ist. Ich las mich auch gerne hier berichtigen, aber ich schätze, daß es die paar male wo es funktionierte nur ein Zufall war. Zufällig war das aktuelle Verzeichnis auch das Arbeitsverzeichnis. Somit hat er paar Glückstreffer. Dann funktionierte es wieder nicht.

Wenn ich ihn also gefragt habe wieso er glaubt, daß es funktionieren könnte, dann frage ich eher ob er auch weiß was er da macht. Ob er vorhat gezielt Daten zu löschen oder einfach nur Dateinamen angibt und hoft, daß er im richtigen Verzeichnis ist.

Tino hat folgendes geschrieben:
Popov hat folgendes geschrieben:
DeleteFile braucht einen Dateinamen mit Pfad. Daß dieser als String übergeben wird ist nebensächlich. Ohne Pfad keine Löschaktion.

Wie gesagt: Bei mir funktioniert es auch wenn ich keine Verzeichnis angebe!


Die Bemerkung bezog sich auf sein Beispiel mit DeleteFile und ShowMessage. Bei ShowMessage hat er einen korrekten Text (wahrscheinlich den Dateinamen), bei DeleteFile konnte der die Datei nicht finden.

Deshalb stehe ich immer noch dazu. Ohne einen Pfad weiß er nicht was er löscht. Ich hab noch nie Probleme mit DeleteFile gehabt. Aber ich hab immer den Pfad mit angegeben.
Dotter Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 19.02.03 18:40 
Ich glaube wir reden hier aneinander vorbei. Wie man einen Datei löscht weiß ich seit Jahren. Ich nutze immer relative Pfade. Denn immer den vollen Pfad zu suchen ist Blödsinn. Man installiert das Programm auf dem Zielrechner ja nicht in das selbe Verzeichniss.
Mein Problem ist daß deletefile die Einträge in der ComboBox NICHT erkennt. Es folgt auch keine Fehlermeldung. Wenn ich bis zum Eintrittspunt trace und einen simplen Vergleich auf einen bestimmten Eintrag mache wird er nicht erkannt obwohl er im Watch steht.

Beispiel:

Im Watch steht : Combobox1.text : "Test"


ausblenden Quelltext
1:
2:
3:
4:
if Combobox1.text ="Test" 
  then deletefile(Combobox1.text) 
else 
  Showmessage('Fehler');



Die Routine meldet immer FEHLER.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 19.02.03 19:11 
Dotter hat folgendes geschrieben:
Ich glaube wir reden hier aneinander vorbei.

Nein tun wir nicht. Du scheinst nur nicht verstehen zu wollen, was wir dir die ganze Zeit sagen wollen.
Zitat:

Ich nutze immer relative Pfade. Denn immer den vollen Pfad zu suchen ist Blödsinn. Man installiert das Programm auf dem Zielrechner ja nicht in das selbe Verzeichniss.

Das ist kein Grund relative Pfade zu benutzen. Nimm die AdressDB von meiner Seite, die kannst hin packen wo du willst, sie wird iher dateien immer, aber auch wirklich immer wiederfinden. Und das ganze ist noch nicht mal sooooo schwer. Kuck mal in der Hilfe unter TApplication -> Exename, ParamStr(0) und ExtractFilepath nach.
Zitat:

Mein Problem ist daß deletefile die Einträge in der ComboBox NICHT erkennt. Es folgt auch keine Fehlermeldung. Wenn ich bis zum Eintrittspunt trace und einen simplen Vergleich auf einen bestimmten Eintrag mache wird er nicht erkannt obwohl er im Watch steht.

Beispiel:

Im Watch steht : Combobox1.text : "Test"


ausblenden Quelltext
1:
2:
3:
4:
if Combobox1.text ="Test" 
  then deletefile(Combobox1.text) 
else 
  Showmessage('Fehler');



Die Routine meldet immer FEHLER.

Dann steht in der Combobox auch nicht 'Test' drin.

In meiner Combobox steht drin: 'Test' und 'Hallo' (auch in der Reihenfolge). Und das geht wunderbar:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Combobox1.Text = 'Hallo' then
    Showmessage('Gefunden')
  else
    ShowMessage('nicht gefunden');
end;

Wähle ich 'Hallo' aus, sagt er 'Gefunden', wähle ich 'Test' aus, sagt er 'nicht gefunden'.
Dotter Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 19.02.03 21:33 
Es ist nicht deletefile das die Macken hat. Es ist die Combobox. Ups... falscher Thread.

Fakt ist: Wenn du eine DATEI als Eintrag hast wird der Namen nicht erkannt. Wenn du es nicht glaubst probiers aus.


btw: Ich hab schon ein paar Jährchen als Coder auf'm Buckel. Verhalte dich also bitte nicht so herablassend ich machs ja auch nicht. :wink:
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 19.02.03 21:56 
OK.

Du machst jetzt bitte mal folgendes. Du erstellst im Stammverzeichnis von c: eine Datei names "test.txt". Dann machst du ein neues Projekt, packst eine Kombobox und einen Button drauf und dann schreibst du folgenden Code:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Combobox1.Items.Add('c:\test.txt');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  DeleteFile(Combobox1.Text);
end;


Der klappt bei mir wunderbar.

Ich habe übrigens auch nicht erst gestern angefangen zu programmieren.