AGB  ·  Datenschutz  ·  Impressum  







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

Name für temporäre Datei erzeugen

Ein Thema von implementation · begonnen am 20. Feb 2009 · letzter Beitrag vom 24. Feb 2009
Antwort Antwort
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#1

Name für temporäre Datei erzeugen

  Alt 20. Feb 2009, 17:51
Ich habe eine Routine CreateTempFile geschrieben, die einen Dateinamen für eine Temporäre Datei erzeugen soll:

CreateTempFile(
Nummer der temporären Datei, index
Mindestanzahl der Stellen der Nummernausgabe, digits (=4)
Tildenersatz, divider (='~')
VorlageString fmt (='~wdpai~$.tmp')
): string;

Die einzelnen Zeichen des VorlageStrings sollen wie folgt behandelt werden:
~ wird durch den Wert des Parameters divider ersetzt
$ wird durch die Nummernausgabe (in HEX) ersetzt
alle anderen Zeichen werden in den Dateinamen übernommen.
Delphi-Quellcode:
function CreateTempFile(index:word;digits:byte=4;divider:char='~';fmt:string='~wdpai~$.tmp'):string;
var i: byte;
begin
  for i := 1 to Length(fmt) do
    if fmt[i]='~then Result := Result+divider
    else if fmt[i]='$then Result := Result+IntToHex(index,digits)
    else Result := fmt[i];
end;
Jetzt das Problem:
Ich habe die Funktion getestet:
CreateTempFile(0,2,'#','tmp$.~~~') Das Ergebnis war jedoch icht wirklich befriedigend: '.###'
Immerhin haben die Tilden gefunzt - und der Punkt.
Doch vom Rest keine Spur.
Marvin
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Name für temporäre Datei erzeugen

  Alt 20. Feb 2009, 17:56
Die Funktionen GetTempPath und GetTempFileName kennst du aber?

Oder warum muss der Name der Datei so kompliziert sein?

Dieser Beitrag könnte dich auch interessieren:
http://www.delphi-library.de/viewtopic.php?p=545554
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

Re: Name für temporäre Datei erzeugen

  Alt 20. Feb 2009, 17:57
Hallo,

muss das nichtelse Result := Result + fmt[i]; heißen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Name für temporäre Datei erzeugen

  Alt 20. Feb 2009, 17:59
Hier im Forum suchenGetTempFileName
http://www.delphipraxis.net/internal...t.php?t=132456
http://www.delphipraxis.net/internal...ct.php?t=78459

und noch die CodeLib
http://www.delphipraxis.net/internal...ect.php?t=6961


Was passiert eigentlich, wenn die schon eine Datei, mit dem Namen von CreateTempFile, existiert?


@nahpets: jupp, müßte es

Zitat:
Das Ergebnis war jedoch icht wirklich befriedigend: '.###'
Immerhin haben die Tilden gefunzt - und der Punkt.
Doch vom Rest keine Spur.
daher auch dein Problem (siehe nahpets)

Nicht-Maskenzeichen löschten den vorherigen Result-String.
der Punkt war das letzte Nicht-Maskenzeichen und stand somit noch drin ... nja und alle folgenen Maskenzeichen.

[add]
aber wenn es unbedingt so funktionieren soll:

Schon mal was von StringReplace gehört?
Delphi-Quellcode:
function CreateTempFile(index: Word; digits: Byte = 4;
  divider: Char='~'; fmt: String='wdpai%s%.*d.tmp'): String;
begin
  Result := StringReplace(fmt, '~', divider, [rfReplaceAll]);
  Result := StringReplace(Result, '$', IntToHex(index, digits), [rfReplaceAll]);
end;
Ich hätt das Ganze allerdings eher mit Format gelöst
und die Maske etwas angepaßt.
Delphi-Quellcode:
function CreateTempFile(index: Word; digits: Byte = 4;
  divider: Char='~'; fmt: String='wdpai%s%.*d.tmp'): String;
begin
  Result := Format(fmt, [divider, digits, index]);
end;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Name für temporäre Datei erzeugen

  Alt 24. Feb 2009, 15:09
Zitat von nahpets:
Hallo,

muss das nichtelse Result := Result + fmt[i]; heißen?
Da hast du Recht.
Das war das Problem.
Zitat von jaenicke:
Die Funktionen GetTempPath und GetTempFileName kennst du aber?
Sicher, es geht hier aber darum, einen Dateinamen für eine temporäre Datei im gleichen Verzeichnis zu erzeugen.

Zitat von himitsu:
Schon mal was von StringReplace gehört?
Delphi-Quellcode:
function CreateTempFile(index: Word; digits: Byte = 4;
  divider: Char='~'; fmt: String='wdpai%s%.*d.tmp'): String;
begin
  Result := StringReplace(fmt, '~', divider, [rfReplaceAll]);
  Result := StringReplace(Result, '$', IntToHex(index, digits), [rfReplaceAll]);
end;
Nein, StringReplace kannte ich nicht.
Eswäre wohl aber eine sinnvolle Lösung.
Zitat von himitsu:
Ich hätt das Ganze allerdings eher mit Format gelöst
und die Maske etwas angepaßt.
Delphi-Quellcode:
function CreateTempFile(index: Word; digits: Byte = 4;
  divider: Char='~'; fmt: String='wdpai%s%.*d.tmp'): String;
begin
  Result := Format(fmt, [divider, digits, index]);
end;
Mir Format wollte ich es nicht lösen, da ich meine eigenen Replace-Zeichen dafür wollte.
Marvin
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Name für temporäre Datei erzeugen

  Alt 24. Feb 2009, 15:29
Das Problem an deinem Code ist allerdings, daß dieses einfach nur einen Namen zusammenstellt, anhand der Forgaben für diese Funktion (index, digits, divider und fmt),
aber dabei nicht sicherstellt, daß nicht schon eine Datei mit diesem Namen existiert.

falls du dir die anderen Beispiele man ansiehst, wird dort noch geschaut ob der gewählte Name noch frei ist und wenn nicht, dann wird sooft der Name geändert, bis die Datei genutzt werden kann.

und du kannst bei einigen der Funktionen auch ein anderes Verzeichnis angeben.
$2B or not $2B
  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 19:18 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