Как я могу отличить ярлык от файла в операции перетаскивания С#?

У меня есть приложение C# .NET 3.5, в которое я включил событие DragDrop в DataGridView.

#region File Browser - Drag and Drop Ops
private void dataGridView_fileListing_DragDrop(object sender, DragEventArgs e)
{
    string[] fileList = e.Data.GetData(DataFormats.FileDrop) as string[];
    foreach (string fileName in fileList)
    {
       //logic goes here
    }
}

Мой вопрос: как я могу отличить ярлык Windows от реального файла? Я попытался:

File.exists(fileName)

в блоке IF, который полезен для фильтрации каталогов, которые были перетащены, однако ярлыки проходят. Можно ли в любом случае указать ярлык в данных, переданных данными события, или запросив файловую систему, как только у меня будет имя?


person Brett McCann    schedule 08.07.2010    source источник


Ответы (2)


Ярлык Windows — это файл, только с расширением .lnk.

Не могли бы вы подробнее рассказать о том, что вы надеетесь делать или не делать с этим?

person Bill    schedule 08.07.2010
comment
В основном графический интерфейс к репозиторию хранилища. Если они уронят файл, я хочу записать его в репозиторий. В нашем контексте добавление ярлыка в интерфейс было бы бессмысленным. - person Brett McCann; 09.07.2010
comment
Итак, вы, вероятно, просто хотите игнорировать файлы с расширением .lnk. - person Bill; 09.07.2010
comment
Теперь я вижу, что .lnk — это зарезервированное расширение. Если вы зайдете в проводник и создадите файл, присвоив ему .lnk, он автоматически станет ярлыком Windows. Поэтому я могу просто проверить, заканчивается ли файл на .lnk. Спасибо! Редактировать: теперь я вижу ваш комментарий... ;) - person Brett McCann; 09.07.2010

Если вам нужно пойти дальше и обработать файлы или папки, на которые нацелен ярлык, вы можете посмотреть этот http://www.codeproject.com/KB/dotnet/shelllink.aspx.

В проекте показано, как использовать Windows Scripting Host для управления ярлыками. Например, после создания вызываемой оболочки времени выполнения (IWshRuntimeLibrary.dll) и добавления ее в свой проект вы можете получить цель таких ярлыков...

string targetPath;
if (System.IO.Path.GetExtension(path) == ".lnk"){
try{
IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
IWshRuntimeLibrary .IWshShortcut ярлык = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(path);
targetPath = ярлык.TargetPath;
}
catch { }
}

person bricklayer137    schedule 06.03.2011