StreamReaderは、ファイルが存在しないことを不平を言っていますが、
-
23-09-2019 - |
質問
ヨーロッパ全体で使用するためにローカライズされたアプリケーションがあります。
ディスクからファイルをロードするメニューオプションがあります。
この操作は私の開発マシンで正常に動作しますが、他のオペレーティングシステムをテストするために使用する仮想マシンでは動作しません_フランス語、スペイン語など。
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);
}
解決
OK問題を見つけました。
オペレーティングシステムは、Explorerに表示されているファイルを「debug.txt」として「debug.txt.txt」として読み取っていると判断しました。
これは、system.io.directory.getFilesへの呼び出しを使用して、ターゲットディレクトリのファイルをリストすることによって決定されました。
Windowsエクスプローラーが「デバッグ」として表示されるように.txt拡張子を削除すると、ファイルが見つかります。
Explorerは、ターゲットマシンに既知のタイプのファイル拡張機能を隠していました。
ご参考までに - - - - - - - - - - - - - - - - - - - - - - - - - ------------------
Explorerを開き、[ツール] - > [フォルダー]オプションを選択し、[ビュー]タブを選択します。
下にスクロールして、「既知のファイルタイプの拡張機能を非表示に」チェックします。
他のヒント
正しいフォルダーにいることを確認するには、 Environment.SpecialFolders
例えば
string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
次に、特定のファイルの権限も確認します。
私も使用しようとします
File.Exists()
それを開く前に。そして、少しのアドバイスが使用することです
Path.Combine()
パスの2つの部分を組み合わせるとき。
たぶんそのプレフィックスが間違っている: C:\Program Files
たとえば、ブラジルのポルトガルのWindowsインストールの場合、フォルダーは "C:\Arquivos de Programas\"
; Windowsのインストールに同じ「機能」がないことを確認する必要があります。
そのサンプルコードがそのフォルダー内で実行されている場合、相対パスを使用できます。
また、使用しようとすることもできます ourPath = "%ProgramFiles%\MyCompany\MyTool\
現在のユーザーが読み込もうとしているため、十分な許可がないため、セキュリティの例外が原因である可能性があります。私は何度もそれに遭遇しました...