我需要測試一個文件是否是一個快捷方式。我仍然試圖找出如何設置東西,但我可能只有它的路徑,我可能只有文件的實際內容(作爲一個字節[]),或者我可能都有。如何以編程方式測試路徑/文件是否是快捷方式?
一些併發症包括我它可能是一個zip文件(在這種情況下,路徑將是一個內部路徑)
我需要測試一個文件是否是一個快捷方式。我仍然試圖找出如何設置東西,但我可能只有它的路徑,我可能只有文件的實際內容(作爲一個字節[]),或者我可能都有。如何以編程方式測試路徑/文件是否是快捷方式?
一些併發症包括我它可能是一個zip文件(在這種情況下,路徑將是一個內部路徑)
使用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
}
檢查擴展名? (.lnk)
除了快捷方式是在一個zip文件(我假設,我沒有測試過這種情況)或我擁有的只是它作爲一個字節緩衝區的情況除外。 – BCS 2008-11-22 00:49:44