8

ファイルがショートカットかどうかをテストする必要があります。私はまだどのように設定されるかを理解しようとしていますが、そのパスしか持っていないかもしれませんし、ファイルの実際の内容しか持っていないかもしれません (byte[] として)、または両方を持っているかもしれません。

いくつかの複雑な点として、zip ファイルに含まれている可能性があります (この場合、パスは内部パスになります)。

4

3 に答える 3

18

ショートカットは、SHELL32.DLL の COM オブジェクトを使用して操作できます。

Visual Studio プロジェクトで、COM ライブラリ "Microsoft Shell Controls And Automation" への参照を追加し、次を使用します。

/// <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
    }
于 2008-11-22T00:28:47.470 に答える
3

このファイルの拡張子や内容を簡単に確認できます。ヘッダーに特別な GUID が含まれています。

[この文書][1]を読んでください。

リンクが削除されました、私にとってはポルノサイトに移動します

于 2008-11-22T00:25:37.633 に答える
-1

拡張子を確認しますか?(.lnk)

于 2008-11-22T00:25:46.790 に答える