“FileNotFoundException”表示确实存在的网络共享文件.我错过了什么

本文关键字:共享文件 网络 错过了 什么 存在 FileNotFoundException 表示 | 更新日期: 2023-09-27 17:56:01

我需要从共享文件中获取默认文件图标。我遇到了一些问题,并发现了"如何从网络共享文件中获取关联的图标"的问题。

但是现在我在共享文件方面遇到了另一个问题,看起来它们不存在。这是我的代码:

public static Icon ExtractAssociatedIcon(String filePath)
{
    int index = 0;
    Uri uri;
    if (filePath == null)
    {
        throw new ArgumentException(String.Format("'{0}' is not valid for '{1}'", "null", "filePath"), "filePath");
    }
    try
    {
        uri = new Uri(filePath);
    }
    catch (UriFormatException)
    {
        filePath = Path.GetFullPath(filePath);
        uri = new Uri(filePath);
    }
    if (uri.IsFile)
    {
        if (!File.Exists(filePath))
        {
            throw new FileNotFoundException(filePath);
        }
        StringBuilder iconPath = new StringBuilder(260);
        iconPath.Append(filePath);
        IntPtr handle = SafeNativeMethods.ExtractAssociatedIcon(new HandleRef(null, IntPtr.Zero), iconPath, ref index);
        if (handle != IntPtr.Zero)
        {
            return Icon.FromHandle(handle);
        }
    }
    return null;
}

我总是FileNotFoundException,我现在不知道为什么。 filePath没问题,我可以通过资源管理器访问这些文件。我试图从filePath创建FileInfo实例(我在某处读到它可能会有所帮助),但仍然没有任何帮助。

我错过了什么?

“FileNotFoundException”表示确实存在的网络共享文件.我错过了什么

IIRC、File.ExistsDirectory.Exists在解析映射到网络共享的驱动器号时遇到一些问题。他们可能根本看不到这些驱动器,因此即使路径指向有效文件,他们也会报告false

如果使用 UNC 路径 ( ''server'share'file.name ) 而不是驱动器号,它可能会起作用,因此请先将驱动器号文件路径解析为 UNC 路径,然后将后者传递给 File.Exists 。例如,请参阅对该问题的回答,以获取如何执行此操作的示例。