Это зависит от того, как вы запускаете перетаскивание файла за пределы вашего приложения. Если щелкнуть файл и перетащить его из проводника 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 вокруг необходимого кода.