[英]c# How to detect and process a .URL file type on DragDrop event
我已經做了很多研究,但是到目前為止還沒有結果。
我發現的唯一鏈接與我的情況有些相似,甚至都不起作用:
基本上 ,首先,我希望代碼能夠識別該文件的擴展名為“ .url ”,或者說是Internet快捷方式,通常由Google Chrome和Mozilla Firefox使用,並且最有可能,所有我未進行廣泛測試的其他網絡瀏覽器。
如果您不知道我指的是哪種類型的快捷方式,我的意思是下圖所示。
以下是我在文本框的DragDrop事件處理程序中使用的當前代碼,它似乎不起作用:
string file = (string)(e.Data.GetData(DataFormats.FileDrop, false));
if (Path.GetExtension(file) == ".url")
{
//Do Stuff Here
}
顯然,該代碼甚至無法獲取快捷方式的假定文件名。 這種快捷方式是已經從瀏覽器拖放到桌面的一種。 因此,在這種情況下,該快捷方式就是為代碼處理而拖放的快捷方式。
(不知道這是否會有所不同,但是我嘗試用“ DataFormats.Serialization ”和“ DataFormats.Html ”替換“ DataFormats.FileDrop ”而沒有任何積極效果。)
同樣,由於某些奇怪的原因,程序立即在上面代碼塊的第一行中斷。 (這恰好是我的DragDrop事件的第一行)
我的問題是:如何對代碼進行更正或修改(即使在完全更改代碼的情況下,也可以在任何程度上進行修改或修改),以便它可以識別.url擴展名的Internet快捷方式文件,然后將其視為普通文件。
另外 ,為什么即使在第一行之后的幾行都設置了斷點(就像完全跳過if語句一樣),為什么在執行第一行之后立即立即停止執行代碼?
如果不是太多,如何只讓下面的行:
e.Effect = DragDropEffects.Link;
當文件在DragEnter事件處理程序中僅是Internet快捷方式類型“ .url ”時可以工作,還是那不可能?
我知道Notepad ++能夠打開和讀取內容,甚至可以編輯Internet快捷方式文件。 盡管我可以獲取識別快捷方式的代碼,但是我認為我將能夠像普通文件一樣從中讀取該快捷方式。
如果可能的話,我希望使用工作代碼作為答案。 很抱歉,我提出的問題很長,我想盡量准確地回答我的問題。
首先, DataFormats.FileDrop
返回一個字符串數組,而不是一個簡單的字符串(因為可以同時拖動多個文件):
string[] files = (string[])(e.Data.GetData(DataFormats.FileDrop));
if (files != null && files.Length > 0 && Path.GetExtension(files[0]) == ".url")
{
//Do Stuff Here
}
效果:拖動時會影響光標圖標。 您應該將其設置為DragEnter / Over並簽入DragDrop。 如果將其設置為“無”,則不能刪除該項目。
private void textBox1_DragEnter(object sender, DragEventArgs e)
{
string[] files = (string[])(e.Data.GetData(DataFormats.FileDrop));
if (files == null || files.Length == 0)
e.Effect = DragDropEffects.None;
else
e.Effect = Path.GetExtension(files[0]) == ".url"
? DragDropEffects.Link
: DragDropEffects.Copy;
}
更新: @taffer的答案解釋了為什么您的代碼表現異常 。
您可以使用下面的代碼,我已經對其進行了測試; 項目的行為與您描述的相同。
private void textBox1_DragDrop(object sender, DragEventArgs e)
{
string[] file = (string[])e.Data.GetData(DataFormats.FileDrop);
{
if (Path.GetExtension(file[0]) == ".url")
{
//Do Stuff Here
//
}
}
}
private void textBox1_DragEnter(object sender, DragEventArgs e)
{
string[] file = (string[])e.Data.GetData(DataFormats.FileDrop);
if (Path.GetExtension(file[0]) == ".url")
{
e.Effect = DragDropEffects.Link;
//Do Stuff Here
}
}
關於第二個問題,請注意:可能引發了異常,請使用try catch進行驗證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.