2008-11-22 109 views
6

我需要測試一個文件是否是一個快捷方式。我仍然試圖找出如何設置東西,但我可能只有它的路徑,我可能只有文件的實際內容(作爲一個字節[]),或者我可能都有。如何以編程方式測試路徑/文件是否是快捷方式?

一些併發症包括我它可能是一個zip文件(在這種情況下,路徑將是一個內部路徑)

回答

14

使用SHELL32.DLL中的COM對象可以處理快捷方式。

在Visual Studio項目中,添加對COM庫「微軟殼牌控制及自動化」的引用,然後使用以下命令:

/// <summary> 
/// Returns whether the given path/file is a link 
/// </summary> 
/// <param name="shortcutFilename"></param> 
/// <returns></returns> 
public static bool IsLink(string shortcutFilename) 
{ 
    string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename); 
    string filenameOnly = System.IO.Path.GetFileName(shortcutFilename); 

    Shell32.Shell shell = new Shell32.ShellClass(); 
    Shell32.Folder folder = shell.NameSpace(pathOnly); 
    Shell32.FolderItem folderItem = folder.ParseName(filenameOnly); 
    if (folderItem != null) 
    { 
     return folderItem.IsLink; 
    } 
    return false; // not found 
} 

你可以得到鏈路的實際目標如下:

/// <summary> 
    /// If path/file is a link returns the full pathname of the target, 
    /// Else return the original pathnameo "" if the file/path can't be found 
    /// </summary> 
    /// <param name="shortcutFilename"></param> 
    /// <returns></returns> 
    public static string GetShortcutTarget(string shortcutFilename) 
    { 
     string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename); 
     string filenameOnly = System.IO.Path.GetFileName(shortcutFilename); 

     Shell32.Shell shell = new Shell32.ShellClass(); 
     Shell32.Folder folder = shell.NameSpace(pathOnly); 
     Shell32.FolderItem folderItem = folder.ParseName(filenameOnly); 
     if (folderItem != null) 
     { 
      if (folderItem.IsLink) 
      { 
       Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink; 
       return link.Path; 
      } 
      return shortcutFilename; 
     } 
     return ""; // not found 
    } 
+0

除了快捷方式是在一個zip文件(我假設,我沒有測試過這種情況)或我擁有的只是它作爲一個字節緩衝區的情況除外。 – BCS 2008-11-22 00:49:44

3

你可以簡單地檢查該文件的擴展名和/或內容。它在標題中包含一個特殊的GUID。

閱讀this document

+3

鏈接中斷 – Letseatlunch 2013-06-13 19:04:48

-1

檢查擴展名? (.lnk)

相關問題