13

ヨーロッパ全体で使用するためにローカライズされたアプリケーションがあります。

ディスクからファイルをロードするメニュー オプションがあります。

この操作は私の開発マシンでは問題なく動作しますが、フランス語やスペイン語など、他のオペレーティング システムのテストに使用する仮想マシンでは動作しません。

StreamReader がファイルを開こうとすると、FileNotFoundException が生成されます。

「ファイル C:\Program Files\MyCompany\MyTool\bin\Files\debug.txt が見つかりませんでした」と表示されます。

問題は、ファイルが正しい場所に正しいファイル名で存在することです。

ターゲット (フランス語) オペレーティング システムのディレクトリ名は、開発マシンと同じです。

何か案は?

string ourPath =   System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);

           try
        {
            System.IO.StreamReader sr = System.IO.File.OpenText(ourPath + @"\bin\Files\debug.txt");
            string input = null;
            while ((input = sr.ReadLine()) != null)
            {
                m_text.Append(input);
            }
            sr.Close();
        }
        catch (System.IO.FileNotFoundException)
        {
            MessageBox.Show("LoadDebugOptions: File Not Found: " + ex.Message);
        }
4

5 に答える 5

28

問題が見つかりました。

エクスプローラーで「debug.txt」と表示されたファイルをOSが「debug.txt.txt」として読み込んでいることが判明。

これは、System.IO.Directory.GetFiles への呼び出しを使用してターゲット ディレクトリ内のファイルを一覧表示することで特定されました。

Windowsエクスプローラーが「デバッグ」として表示するように.txt拡張子を削除すると、ファイルが見つかります。

エクスプローラーは、ターゲット マシンで既知の種類のファイル拡張子を隠していたことが判明しました。

ご参考までに - - - - - - - - - - - - - - - - - - - - - - - - - ---------------

エクスプローラーを開き、[ツール] -> [フォルダー オプション] を選択し、[表示] タブを選択します。

下にスクロールして、「既知のファイル タイプの拡張子を非表示にする」のチェックを外します。

于 2010-01-27T14:11:39.567 に答える
5

正しいフォルダにいることを確認するには、次を参照してください。Environment.SpecialFolders

例えば

string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);

次に、特定のファイルのアクセス許可も確認します。

于 2010-01-27T12:16:34.557 に答える
4

私も使ってみます

File.Exists()

それを開く前に。そして、少しアドバイスは使用することです

Path.Combine()

パスの2つの部分を組み合わせる場合。

于 2010-01-27T12:36:29.543 に答える
1

たぶん、そのプレフィックスは間違っています:C:\Program Files

たとえば、ブラジル ポルトガル語の Windows インストールの場合、そのフォルダは"C:\Arquivos de Programas\"; Windows インストールに同じ「機能」がないことを確認する必要があります。

そのサンプル コードがそのフォルダー内で実行される場合は、相対パスを使用できます。

使用することもできますourPath = "%ProgramFiles%\MyCompany\MyTool\

于 2010-01-27T12:13:39.990 に答える
1

読み取ろうとしている現在のユーザーに十分な権限がないため、セキュリティ例外が原因である可能性があります。何度も遭遇してしまいました……。

于 2010-01-27T12:16:21.733 に答える