Windows XP/7/10をターゲットとするLazarus(1.5)fpc(3.1.1)でアプリケーションを書いています。 私のアプリケーションは、ユーザが選択したいくつかのパスでファイルシステムのファイルを読み書きします。パスまたはファイル名は、例えば(A〜Eéのような)特殊文字が含まれている場合:Lazarus ListBox SaveToFileファイル名に特殊文字
C:
'EFCreateError' できませんに:\ユーザーは\DeAndrè\
アプリケーションout.txtを例外を発生させますファイル "C:\ Users \DeAndrè\ out.txt"を作成します。フォームTListBoxコンポーネント(ListBox1が)に ドラッグし、2のTButton(ボタン1とボタン)とTSaveDialog(SaveDialog1):
はSIGLEフォームで簡単なアプリケーションを書いて、この問題を再現することが可能です。 (のみListBox1が上のいくつかのデータを書き込むために使用される)のButton1のOnClickイベントで
:Button2ののOnClickイベントで
procedure TForm1.Button1Click(Sender: TObject);
begin
// Simple Add Hello to ListBox
ListBox1.Items.Add('Hello '+IntToStr(ListBox1.Items.Count));
end;
:
procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
ListBox1.Items.SaveToFile(SaveDialog1.FileName);
end;
end;
は、アプリケーションを実行し、 "ボタン1" いくつかをクリックしてくださいいくつかの言葉をリストに追加してからButton2をクリックし、特殊文字を含むパスにコンテンツを保存してみてください。
私はFileNa私は機能UTF8ToAnsiで動作しますが、なぜですか? Windows FileSystemはUTF8ではありませんか?
ソリューションには「標準」がありますか?たとえば、正しいモードでファイルシステムを使用するようにアプリケーションを設定するか、それとも類似していますか? 「プロジェクト」で
:あなたは、「カスタムオプション」に-dEnableUTF8RTLを追加する必要がありますUnicodeAPIを使用するようにラザロを有効にするには :
は、私は解決策を見つけたルディとダビデの方向後あなた
@RudyVelthuis私のWindowsインストールでは、[このリンク](https://msdn.microsoft.com/en-us/library/windows/desktop/dd317748(v = vs。 85).aspx)はUnicode – AndreaBoc
Unicode APIを呼び出すlazarusコード –
@David Delphi(XE8)の同じサンプルコードはエラーなしで動作します... – AndreaBoc