Savetofile

Signaler
Messages postés
3
Date d'inscription
lundi 2 février 2004
Statut
Membre
Dernière intervention
24 septembre 2009
-
Messages postés
3811
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
15 juin 2020
-
Bonjour,
La méthode TStrings.SaveToFile ne permet pas d'enregistrer un fichier dans un répertoire inexistant.
j'aurais voulu surcharger cet appel pour pouvoir créer les répertoires de destination lorsque celui ci n'existe pas.
Mais je ne sais pas comment m'y prendre ??
Merci de votre aide.
francky57

5 réponses

Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Hmm ... pour surcharger :

type
 TStringsSurcharge = class(TStrings)
 ...
 public
  procedure SaveToFile(AFileName: TFileName); override;
 end;


Pour le répertoire inexistant, il me semble que CreateDir gère la récursivité (je pense qu'en lui passant un répertoire existant ou pas, il va le créer (et créer les eventuels dossiers intermédiaires). Sinon, procédure récursive ...



Cordialement, Bacterius !
Messages postés
3811
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
15 juin 2020
30
non non
[hr]procedure TForm1.Button2Click(Sender: TObject);

var FilePath: string;
[b]begin
  /bFilePath := ExtractFilePath(Application.ExeName);
  if ForceDirectories(FilePath+'toto\titi\tata') [b]then
  /bMemo1.Lines.SaveToFile(FilePath+'toto\titi\tata\test.txt');
end;
[hr]


[hr]@+Cirec
[hr]
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
30
TStringList! pas TStrings!


TStrings contient des méthodes abstraites.


interface 

uses ....

type
  TStringList = class(Classes.TStringList)
  public
    procedure SaveToFile(const FileName: String); override;
  end;

  TForm....

implementation

{ TStringList }

procedure TStringList.SaveToFile(const FileName: String);
var path : string;
begin
  path := ExtractFilePath(FileName);
  if not  directoryExists(Path) then
    CreateDir(Path);

  inherited SaveToFile(FileName);
end;
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
30
oui forcedirectories... j'ai confondus



procedure TStringList.SaveToFile(const FileName: String);
var path : string;
begin
  path := ExtractFilePath(FileName);
  if not  directoryExists(Path) then
    ForceDirectories(Path);

  inherited SaveToFile(FileName);
end;
Messages postés
3811
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
15 juin 2020
30
si il n'y a pas de chemin (chaine vide) ForceDirectories plante
[quote=l'Aide Delphi]Important : N'appelez pas ForceDirectories avec une chaîne vide.Ceci provoque le déclenchement d'une exception par ForceDirectories.

/quote

ensuite il n'est pas utile de tester l'existence du répertoire ... ForceDirectories le fait et renvoi True si le répertoire existe où si il a été crée
[quote=l'Aide Delphi]ForceDirectories crée le répertoire spécifié dans Dir,qui doit être un chemin d'accès complet.Si les répertoires indiqués dans le chemin n'existent pas encore,ForceDirectories tente de les créer.
/quote

que se passe t'il si on lui passe un chemin relatif ? par Ex. SaveToFile('..\toto\Fichier.txt')
ben ça plante aussi

[hr]@+Cirec
[hr]