プログラムは、ドラッグドロップファイルを開いている相対パスから画像を読み込むことができません
-
05-10-2019 - |
質問
C#で書いたプログラムがあります。これは、画像をFromFileからロードすると、画像を毎回正常にロードします。ただし、プログラムにファイルのコマンドライン引数を提供しているように、実行可能ファイルに別のファイルをドラッグアンドドロップすると、ファイルが実行可能ファイルと同じフォルダーにないように、プログラムはクラッシュします。ファイルは存在しませんが、そうであっても。
実行可能ファイルにファイルをドロップすることで、画像を何らかの形でロードしているパスを変更していると思います。この問題を修正するにはどうすればよいですか?
解決
あなたのプログラムは、別の環境で開始されます。CurrentDirectory。必ず絶対パス名でファイルをロードすることを確認してください(つまり、 しないでください image.fromfile( "blah.jpg")を使用します)。
exeと同じディレクトリに保存されているファイルへの絶対パスを取得するには、たとえばapplication.startuppathを使用できます。またはassembly.getEntryAssembly()。場所Windowsフォームを使用しない場合。
他のヒント
これは、アプリケーションの外でファイルドラッグを開始する方法に依存します。 Windows Explorerからファイルをクリックしてドラッグすると、 完全な絶対パス名 ドロップに含まれています。この場合、次のコードにファイル名が表示され、ファイルのコンテンツのドロップをテキストボックスに実行します。
private void textBox1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
}
private void textBox1_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
var objPaths = (string[])(e.Data.GetData(DataFormats.FileDrop));
if (objPaths != null && objPaths.Length > 0 && File.Exists(objPaths[0]))
{
MessageBox.Show(string.Format("Filename: {0}", objPaths[0]));
using (TextReader tr = new StreamReader(objPaths[0]))
textBox1.Text = tr.ReadToEnd();
}
}
}
ドラッグソースの詳細をお知らせください。ほとんどの場合、ソースを変更して絶対パスをドラッグするか、ドラッグデータの相対パスからフルパスを決定する必要があります。
また、データが悪いためにプログラムがクラッシュしないでください。必要な条件を確認するか、必要なコードの周りにトライ/キャッチブロックを使用します。