J'écris une application avec Lazarus (1.5) fpc (3.1.1) ciblant Windows XP/7/10. Mon application lire et écrire des fichiers dans le système de fichiers dans un chemin choisi par les utilisateurs. Si le chemin ou le nom de fichier contiennent des caractères spéciaux (comme à è é) par exemple:Lazarus ListBox SaveToFile Nom de fichier avec des caractères spéciaux
C: \ Users \ DeAndre \ out.txt
application soulèvent l'exception:
'EFCreateError' Impossible de crée le fichier "C: \ Users \ DeAndrè \ out.txt".
est possible de reproduire ce problème écrire une application simple avec une forme Sigle: glisser sous la forme d'un TListBox (ListBox1), deux TButton (Button1 et Button2) et un TSaveDialog (SaveDialog1).
En cas OnClick de Button1 (utilisé uniquement pour écrire des données sur ListBox1):
procedure TForm1.Button1Click(Sender: TObject);
begin
// Simple Add Hello to ListBox
ListBox1.Items.Add('Hello '+IntToStr(ListBox1.Items.Count));
end;
En cas OnClick Bouton2:
procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
ListBox1.Items.SaveToFile(SaveDialog1.FileName);
end;
end;
Lancez l'application et cliquez sur "Button1" certains fois (juste pour ajouter quelques mots dans la liste) puis cliquez sur Button2 et essayez d'enregistrer le contenu dans un chemin contenant des caractères spéciaux ...
J'ai remarqué que si je convertis FileNa moi avec la fonction UTF8ToAnsi ça marche, mais pourquoi? Windows FileSystem n'est pas UTF8?
Une solution "standard" existe-t-elle? par exemple définir l'application pour utiliser le système de fichiers en mode correct ou similaire?
Merci
@RudyVelthuis Merci, mes installations Windows utilisent NTFS FileSystem, selon [ce lien] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd317748 (v = vs. 85) .aspx) est Unicode – AndreaBoc
Est-ce que le code Lazarus appelant l'API Unicode –
@David même exemple de code dans Delphi (XE8) fonctionne sans erreur ... – AndreaBoc