0

Directory.Exists()アクセント付き文字を含む文字列での使用に問題があります。

これはディレクトリ パスです: D:\ést_test\scenery. 私が解析しているファイル内の単純な文字列として入っています:

[Area.121]
Title=ést_test
local=D:\AITests\ést_test
Layer=121
Active=FALSE
Required=FALSE

私のコードは、ローカル値を取得して追加\sceneryしています。これが存在すること(存在すること)をテストする必要があり、単に使用しています:

if (!Directory.Exists(area.Path))
            {
                // some handling code
                area.AreaIsValid = false;
            }

これは false を返します。私が行っている文字列処理は、アクセント付きの文字を置き換えているようです。VS2012 のテキスト ビジュアライザーはこれを示しています (directoryManager は単なるラップ アラウンドですSystem.IO.Directory)。

ここに画像の説明を入力

表示される警告メッセージは次のとおりです。

ここに画像の説明を入力

そのため、なまりのある文字が認識されていないようです。この問題を検索すると出てきますが、ほとんどはアクセント付き文字の削除または置換に関するものです。現在、「通常の」文字列処理を使用しています。使用してみFileInfoましたが、とにかくパスが壊れているようです。

私の最初の質問は、パスを文字列に格納してDirectory.Existsテストに合格するにはどうすればよいですか?

これにより、パス名にラテン文字以外の文字が含まれているという、より広範な問題が発生します。私はアラビア語を見ることができるので、世界中にユーザーがいます。ロシア語、中国語などのパス。これらすべてをどのように処理できますか?

4

1 に答える 1

6

問題は、ほぼ間違いなく、間違ったエンコーディングでファイルをロードしていることです。それがファイル名であるという事実は関係ありません-スクリーンショットは、呼び出す前に関連するデータを失ったことを示していますDirectory.Exists

ファイルのエンコーディング(UTF-8、Cp1252など)を知っていることを確認してから、ファイルをロードしている方法(例File.ReadAllText)に引数として渡します。これで十分な情報が得られない場合は、ファイルについて(ファイルがどのエンコーディングであるかを理解するために)、コードについて(どのように読んでいるか)を詳しく教えてください。

正しいデータをロードできたら、ファイルアスペクトが自動的に処理されることを願っています。

于 2013-01-07T17:22:55.627 に答える