AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem bei Datei-Erstellung

Ein Thema von julchen · begonnen am 16. Jun 2008 · letzter Beitrag vom 16. Jun 2008
Antwort Antwort
julchen

Registriert seit: 20. Mär 2008
115 Beiträge
 
Delphi 10.3 Rio
 
#1

Problem bei Datei-Erstellung

  Alt 16. Jun 2008, 09:31
Hallo,

ich möchte, dass auf Knopfdruck eine neue Datei erstellt wird, deren Dateiname sich immer um eins erhöht!. Das funktioniert auch soweit, aber ich muss von Hand immer die nullte Datei erstellen und finde den Fehler nicht, warum das so ist! Vielleicht seht ihr ja den Fehler und könnt mir helfen!
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
        i, x: integer;
begin
        x := 0;
        for i := 0 to FileListBox1.Count - 1 do
        begin
          If not Fileexists(inttoStr(x) + SaveDialog1.Filter) then
          begin
            Memo1.Lines.SaveToFile(IntToStr(x) + SaveDialog1.Filter);
          end
          else
            inc(x);
            Memo1.Lines.SaveToFile(IntToStr(x) + SaveDialog1.Filter);
        end;
        FileListBox1.Update;
end;
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
657 Beiträge
 
Delphi 12 Athens
 
#2

Re: Problem bei Datei-Erstellung

  Alt 16. Jun 2008, 09:44
Moin,

ich bin mir nicht ganz sicher, ob ich wirklich verstanden habe, was du machen willst und was schief läuft, aber du hast auf jeden Fall beim "else" den begin/end-Block vergessen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
        i, x: integer;
begin
        x := 0;
        for i := 0 to FileListBox1.Count - 1 do
        begin
          If not Fileexists(inttoStr(x) + SaveDialog1.Filter) then
          begin
            Memo1.Lines.SaveToFile(IntToStr(x) + SaveDialog1.Filter);
          end
          else
          begin
            inc(x);
            Memo1.Lines.SaveToFile(IntToStr(x) + SaveDialog1.Filter);
         end;
        end;
        FileListBox1.Update;
end;
Vielleicht klappt es ja schon damit.

Ansonsten könnte man das Ganze auch etwas vereinfachen, wenn ich mich gerade nicht vertue:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
        i, x: integer;
begin
        x := 0;
        for i := 0 to FileListBox1.Count - 1 do
        begin
          If fileexists(inttoStr(x) + SaveDialog1.Filter) then
            inc(x)
  
          Memo1.Lines.SaveToFile(IntToStr(x) + SaveDialog1.Filter);
        end;
        FileListBox1.Update;
end;
Vielleicht klappts ja damit. Ansonsten müsstest du noch mal genauer beschreiben, was eigentlich nicht klappt. Wird Datei 0 gar nicht geschrieben oder steht das falsche drin?

Bis denn
Bommel
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Problem bei Datei-Erstellung

  Alt 16. Jun 2008, 09:45
Warum nimmst du nicht die Zählvariable der Schleife für die Dateinamen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Problem bei Datei-Erstellung

  Alt 16. Jun 2008, 09:47
Guten Morgen,

ich habe es mal etwas umgeformt.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
        i, x: integer;
begin
        x := 0;
        for i := 0 to FileListBox1.Count - 1 do
        begin
          while Fileexists(inttoStr(x) + SaveDialog1.Filter) do
            inc(x);
          Memo1.Lines.SaveToFile(IntToStr(x) + SaveDialog1.Filter);
        end;
        FileListBox1.Update;
end;
Bei Deiner Version fehlt ein begin end block.
@Luckie
Zitat von Luckie:
Warum nimmst du nicht die Zählvariable der Schleife für die Dateinamen?
Weil man die Schleifenvariable innerhalb der Schleife nicht ändern sollte.


Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Problem bei Datei-Erstellung

  Alt 16. Jun 2008, 09:57
Wenn die Eigenschaft Delphi-Referenz durchsuchenFilter dem Namen zu urteilen noch eine Maske enthält, so wird da nie ein gültiger Dateiname draus, schliesslich sind die Platzhalter * und ? nicht erlaubt im Dateinamen (gerade, weil es Platzhalter sind).
  Mit Zitat antworten Zitat
julchen

Registriert seit: 20. Mär 2008
115 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Problem bei Datei-Erstellung

  Alt 16. Jun 2008, 10:25
@Klaus
Die 0.txt wird immer noch nicht erstellt!
Dafür verdoppeln sich mit while mit jedem Klick die Anzahl der Dateien!
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Problem bei Datei-Erstellung

  Alt 16. Jun 2008, 10:33
Hi!

Anstatt

Delphi-Quellcode:
If not Fileexists(inttoStr(x) + SaveDialog1.Filter) then
          begin
            Memo1.Lines.SaveToFile(IntToStr(x) + SaveDialog1.Filter);
          end
          else
            inc(x);
            Memo1.Lines.SaveToFile(IntToStr(x) + SaveDialog1.Filter);
solltest du

Delphi-Quellcode:
If not Fileexists(inttoStr(x) + '.DeineEndung') then
          begin
            Memo1.Lines.SaveToFile(IntToStr(x) + '.DeineEndung');
          end
          else
          begin
            inc(x);
            Memo1.Lines.SaveToFile(IntToStr(x) + '.DeineEndung');
          end;
versuchen.
Marc
  Mit Zitat antworten Zitat
julchen

Registriert seit: 20. Mär 2008
115 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Problem bei Datei-Erstellung

  Alt 16. Jun 2008, 10:34
Ich hab´s jetzt unelegant gelöst:
Delphi-Quellcode:
x := 0;
If not FileExists('0.txt') then begin FileCreate('0.txt') end;
for i := 0 to FileListBox1.Count - 1 do
  begin ...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Problem bei Datei-Erstellung

  Alt 16. Jun 2008, 10:46
Hallo,

solange die Datei 0.txt nicht existiert, bleibt wahrscheinlich deine FileListBox leer und deine Schleife wird garnicht erst betreten - ergo wird auch die Datei 0.txt nie angelegt.

Delphi-Quellcode:
function NextFileNumber(dir, ext: string): Integer;
begin
  dir := IncludeTrailingPathDelimiter(dir);
  Result := 0;
  while FileExists(Format('%s%d%s', [dir, Result, ext])) do
    Inc(Result);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  n: integer;
begin
  n := NextFileNumber(S_DIR, '.txt');
  Memo1.Lines.SaveToFile(IntToStr(n) + '.txt');
  FileListBox1.Update;
end;
Diese Methode funktioniert bei einer kleinen Anzahl Dateien, aber besser wäre es, wenn du dir einfach die zuletzt verwendete Dateinummer merkst. In einer Single-User Umgebung ist das trivial, bei mehreren Benutzern würde ich das Verzeichnis überwachen.

EDIT:

Wenn du alle Dateinamen sowieso in einer FileListBox vorhältst, dann kannst du die Funktion NextFileNumber() auch ohne Zugriff auf das Dateisystem implementieren.

Delphi-Quellcode:
function NextFileNumber(files: TStrings): Integer;
var
  i, n, nMax: Integer;
begin
  nMax := -1;
  for i := 0 to Pred(files.Count) do
  begin
    n := StrToIntDef(ChangeFileExt(ExtractFileName(files[i]), ''), -1);
    if n > nMax then
      nMax := n;
  end;
  Result := Succ(nMax);
end;
Die Semantik ist hier aber geringfügig anders - Lücken werden nicht berücksichtigt.

Getippt und nicht getestet.

Grüße vom marabu
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:19 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