Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#中,如何区分拖放事件中的文件或文件夹?_C#_File_Drag And Drop_Directory - Fatal编程技术网

在c#中,如何区分拖放事件中的文件或文件夹?

在c#中,如何区分拖放事件中的文件或文件夹?,c#,file,drag-and-drop,directory,C#,File,Drag And Drop,Directory,我有一个表单,您可以将文件拖放到其中,我想知道如何让应用程序知道数据是文件还是文件夹 我的第一次尝试是在数据中查找一个“.”,但有些文件夹确实有一个“.”。在他们里面。我还尝试过执行File.Exists和Directory.Exists条件,但它只在当前应用程序路径上搜索,而不在其他任何地方搜索 是否有方法可以以某种方式应用.Exists在特定目录中,或者是否有方法可以检查将何种类型的数据拖到表单中?如果路径是字符串,则可以使用获取枚举,然后检查是否设置了FileAttributes.dire

我有一个表单,您可以将文件拖放到其中,我想知道如何让应用程序知道数据是文件还是文件夹

我的第一次尝试是在数据中查找一个“.”,但有些文件夹确实有一个“.”。在他们里面。我还尝试过执行File.Exists和Directory.Exists条件,但它只在当前应用程序路径上搜索,而不在其他任何地方搜索


是否有方法可以以某种方式应用.Exists在特定目录中,或者是否有方法可以检查将何种类型的数据拖到表单中?

如果路径是字符串,则可以使用获取枚举,然后检查是否设置了
FileAttributes.directory
标志

要在.NET 4.0之前的.NET版本中检查文件夹,应执行以下操作:

FileAttributes attr = File.GetAttributes(path);
bool isFolder = (attr & FileAttributes.Directory) == FileAttributes.Directory;
在较新的版本中,您可以使用
HasFlag
方法获得相同的结果:

bool isFolder = File.GetAttributes(path).HasFlag(FileAttributes.Directory);
还请注意,它可以提供有关文件/文件夹的各种其他标志,例如:

  • FileAttributes.Directory
    :路径表示文件夹
  • FileAttributes.Hidden
    :文件被隐藏
  • FileAttributes.Compressed
    :文件已压缩
  • FileAttributes.ReadOnly
    :文件是只读的
  • FileAttributes.NotContentIndexed
    :从索引中排除

等等。

您使用的是WPF还是WinForms?您的应用程序检索的是完整路径还是相对路径?(请举例。)如果它只检索相对路径,则需要
路径。将
与应用程序路径组合以获得完整路径。是的,这就是我遇到的问题。它没有得到完整的路径。.Exists方法现在可以工作了。谢谢我更喜欢:
bool isFolder=File.GetAttributes(File.hasvag)(FileAttributes.Directory)+1@Dan,但请记住,这在旧版本的框架中不可用,在这种情况下,上述解决方案是可行的。@TimothyP在这种情况下,一点逻辑不会伤害任何人。;)
if(Directory.Exists(path))
  // then it is a directory
else
  // then it is a file