Entwickler-Ecke

Internet / Netzwerk - idFTP - Fehler beim überschreiben


F34r0fTh3D4rk - Do 12.01.06 17:06
Titel: idFTP - Fehler beim überschreiben
Hi, in meinem Programm bekomme ich immer den Fehler "FileExists" wenn ich eine Datei schreiben will, die auf dem FTP schon existiert, dabei hab ichs genauso gemacht wie im Beispiel und da klappt das wunderbar.

Hier die Upload Prozedur:

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:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
procedure UploadPerFTP(Directory, sub: string);
  procedure GetDir(dir: string);
  var
    SearchRec: TSearchRec;
    details, nodetails: TStringList;
    k: Integer;
  begin
    Application.ProcessMessages;
    if ilch_stop then
      exit;
    if FindFirst(dir + '*.*', faAnyFile, SearchRec) = 0 then
    begin
      repeat
        if (SearchRec.Name <> '.'and (SearchRec.Name <> '..'then
        begin
          if (SearchRec.Attr and faDirectory) = faDirectory then
          begin
            details   := TStringList.Create;
            nodetails := TStringList.Create;
            MainForm.IdFTP.List(details, '', True);
            MainForm.IdFTP.List(nodetails, '', False);
            for k := details.Count - 1 downto 0 do
            begin
              if details.Strings[k] <> '' then
              begin
                if (details.Strings[k][1] <> 'd'or
                  (nodetails.Strings[k] = '.'or
                  (nodetails.Strings[k] = '..'then
                begin
                  details.Delete(k);
                  nodetails.Delete(k);
                end;
              end;
            end;
            if nodetails.IndexOf(SearchRec.Name) = -1 then
            begin
              MainForm.IdFTP.MakeDir(SearchRec.Name);
            end;
            MainForm.IdFTP.ChangeDir(SearchRec.Name);
            details.Free;
            nodetails.Free;
            GetDir(dir + SearchRec.Name + '\');
            MainForm.IdFTP.ChangeDirUp;
          end 
          else 
          begin
            MainForm.L_File.Caption := 'Datei: ' + SearchRec.Name;
            MainForm.IdFTP.Put(dir + SearchRec.Name, SearchRec.Name);
            Application.ProcessMessages; 
          end;
        end;
      until FindNext(SearchRec) <> 0;
      FindClose(SearchRec);
    end;
  end;
var
  dir: string;
  details, nodetails: TStringList;
  k: Integer;
begin
  dir := subpath;
  if dir <> '' then
  begin
    while Pos('/', dir) > 0 do
    begin
      details   := TStringList.Create;
      nodetails := TStringList.Create;
      MainForm.idFTP.List(details, '', True);
      MainForm.idFTP.List(nodetails, '', False);
      for k := details.Count - 1 downto 0 do
      begin
        if details.Strings[k] <> '' then
        begin
          if (details.Strings[k][1] <> 'd'or
            (nodetails.Strings[k] = '.'or
            (nodetails.Strings[k] = '..'then
          begin
            details.Delete(k);
            nodetails.Delete(k);
          end;
        end;
      end;
      if nodetails.IndexOf(Copy(dir, 1, Pos('/', dir) - 1)) = -1 then
      begin
        MainForm.idFTP.MakeDir(Copy(dir, 1, Pos('/', dir) - 1));
      end;
      MainForm.idFTP.ChangeDir(Copy(dir, 1, Pos('/', dir) - 1));
      Delete(dir, 1, Pos('/', dir));
      details.Free;
      nodetails.Free;
    end;
  end;
  dir := directory;
  if dir[Length(dir)] <> '\' then dir := dir + '\';
  GetDir(dir);
end;

kann man den fehler nicht irgendwie verhindern, mir ist es im moment so ziemlich egal, ob die datei jetzt überschrieben wird oder gelassen wird, nur mich stört immer dieser fehler dann schmiert das ganze programm ab und der upload geht nicht weiter das regt mich total auf.

danke schonmal ;)

EDIT: Ich glaube der Fehler kommt nur bei einem Ordner, diese frage ich jetz ab und das scheint zu gehen.