`FileNotFoundException` 用于确实存在的网络共享文件。我错过了什么?
`FileNotFoundException` for network-shared files that do exist. What am I missing?
我需要从共享文件中获取默认文件图标。我遇到了一些问题,发现 the question "How to get the associated icon from a network share file".
但是现在共享文件又出现了问题,好像它们不存在一样。这是我的代码:
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
实例(我在某处读到它可能有帮助)但仍然没有。
我错过了什么?
IIRC、File.Exists
和 Directory.Exists
在解析映射到网络共享的驱动器号时存在一些问题。他们可能根本看不到这些驱动器,因此即使路径指向有效文件,他们也会报告 false
。
如果您使用 UNC 路径 (\server\share\file.name
) 而不是驱动器号,它可能会起作用,因此首先将基于驱动器号的文件路径解析为 UNC 路径,然后将后者传递给 File.Exists
.参见例如this answer to that question 举例说明如何做到这一点。
我需要从共享文件中获取默认文件图标。我遇到了一些问题,发现 the question "How to get the associated icon from a network share file".
但是现在共享文件又出现了问题,好像它们不存在一样。这是我的代码:
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
实例(我在某处读到它可能有帮助)但仍然没有。
我错过了什么?
IIRC、File.Exists
和 Directory.Exists
在解析映射到网络共享的驱动器号时存在一些问题。他们可能根本看不到这些驱动器,因此即使路径指向有效文件,他们也会报告 false
。
如果您使用 UNC 路径 (\server\share\file.name
) 而不是驱动器号,它可能会起作用,因此首先将基于驱动器号的文件路径解析为 UNC 路径,然后将后者传递给 File.Exists
.参见例如this answer to that question 举例说明如何做到这一点。