2014-03-31 124 views
0

我有這個小工具,我正在幫助管理另一個應用程序的菜單。我需要這個工具來複制快捷方式文件,就像其他文件一樣。不幸的是,它會複製每個文件,但文件的擴展名爲.lnk。有誰知道爲什麼嗎?我似乎無法找到任何這方面的信息。我不是從頭開始創建快捷方式,而是複製現有的快捷方式。我已經嘗試了FileInfo.CopyTo()和File.Copy()方法。它實際上覆制文件,然後拋出異常,這真的很奇怪。如果我用try..catch包裝它(在catch中沒有任何內容),那麼它似乎與除了其中一些失去其快捷方式圖標的例外一起工作。不,這可能幫助不大,但這裏是我的代碼的要點:複製快捷方式到桌面

DirectoryInfo destinationDirectory= new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));  
string temppath = Path.Combine(destinationDirectory.FullName, sourceFile.Name); 
sourceFile.CopyTo(temppath.FullName, true); 

答:

感謝您對阿里我pointint在正確的方向。下面是我落得這樣做:

DirectoryInfo destinationDirectory = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Desktop)); 
FileInfo shortcut = sourceFile.Directory.GetFiles("*.lnk").FirstOrDefault(f => f.Name == sourceFile.Name) as FileInfo; 
if (shortcut != null) 
{ 
    File.Copy(shortcut.FullName, Path.Combine(destinationDirectory.FullName, shortcut.Name), true); 
} 
+1

試試這個,報告結果:VAR快捷=新的DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Desktop))的GetFiles。 ( 「* .LNK」); – Alireza

+0

返回兩個項目(用於桌面上的兩個快捷方式)的FileInfo []。每個顯示有lnk擴展名。 – bjhuffine

回答

1

這應該工作:

var shortcuts = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Desktop)) 
       .GetF‌​iles("*.lnk"); 
string destFolder = destinationDirectory.FullName; 
foreach(var f in shortcuts) 
    File.Copy(f.FullName, Path.Combine(destFolder,f.Name)); 
+0

那麼,這是從桌面工作到另一個文件夾,但試圖從主文件夾到桌面我得到一個拒絕訪問異常。我可能也應該提到這一點。我得到這個例外,但就像我說的那樣,它仍然是複製的。這很奇怪,這讓我質疑我的方法。 – bjhuffine

+0

好的,我做了一個你說的要做的變種,並讓它起作用。我仍然不明白爲什麼。看來我不能簡單地採取與文件關聯的路徑並從那裏開始。我顯然必須閱讀該文件?這是否與文件屬性有關?我會將我的結果附加到我的問題中,以便爲其他人澄清。 – bjhuffine