0

I have a program I have written in C#, which loads an image with Image.FromFile, and it loads the image successfully every time. However, when you drag and drop another file on the executable, like you are giving the program the command line argument of the file, and the file is not in the same folder as the executable, the program crashes because it says the path to the file does not exist, even though it does.

I think that by dropping a file on the executable, it's changing the path it's loading images from somehow. How can I fix this problem?

4

2 に答える 2

1

プログラムは別のEnvironment.CurrentDirectoryで開始されます。常に絶対パス名でファイルをロードするようにしてください(つまり、Image.FromFile( "blah.jpg")を使用しないでください)。

EXEと同じディレクトリに保存されているファイルへの絶対パスを取得するには、たとえばApplication.StartupPathを使用できます。または、Windowsフォームを使用しない場合はAssembly.GetEntryAssembly()。Location。

于 2010-05-31T18:13:54.523 に答える
0

アプリケーションの外部でファイルのドラッグを開始する方法によって異なります。Windows エクスプローラーからファイルをクリックしてドラッグすると、完全な絶対パス名がドロップに含まれます。この場合、次のコードはファイル名を表示し、ファイルの内容をテキスト ボックスにドロップします。

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();
        }
    }
}

ドラッグソースについて詳しく教えてください。ほとんどの場合、ソースを変更して絶対パスをドラッグするか、何らかの方法でドラッグ データの相対パスからフル パスを決定する必要があります。

また、不正なデータが原因でプログラムがクラッシュすることはありません。必要な条件を確認するか、必要なコードの周りに try/catch ブロックを使用してください。

于 2010-05-31T18:26:34.040 に答える