C# 给定一个路径,如何确定它是目录还是文件

C# 给定一个路径,如何确定它是目录还是文件,c#,C#,我需要复制目录中的文件和目录。假设只有一个级别 有一个目录C:\AAAA,其中包含5个没有其他子目录和7个文件的其他目录子目录 当我打电话时: System.IO.Directory.GetFileSystemEntries("C:\\AAAA"); 返回一个字符串数组。它将包含按口述排序顺序排序的条目。因此,当我为每个循环调用 foreach(string path in System.IO.Directory.GetFileSystemEntries("C:\\AAAA")) {

我需要复制目录中的文件和目录。假设只有一个级别

有一个目录C:\AAAA,其中包含5个没有其他子目录和7个文件的其他目录子目录

当我打电话时:

System.IO.Directory.GetFileSystemEntries("C:\\AAAA");
返回一个字符串数组。它将包含按口述排序顺序排序的条目。因此,当我为每个循环调用

foreach(string path in System.IO.Directory.GetFileSystemEntries("C:\\AAAA"))
{
    //how to determine path is dictonay or file??
}
因此,从System.IO.Directory.GetFileSystemEntriesC:\AAAA返回的数组中,如何确定给定路径是文件路径还是目录?

使用Directory.Exists或file.Exists检查。使用Directory.Exists或file.Exists检查您可以尝试:

或:

也获取这些属性。

您可以尝试:

或:

也获取这些属性。

这应该可以做到:

System.IO.Directory.GetFileSystemEntries("C:\\Temp");

foreach (string path in System.IO.Directory.GetFileSystemEntries("C:\\Temp"))
{
      if (File.Exists(path))
      {
          Console.WriteLine("im a file");
      }
      else
      {
          Console.WriteLine("im a folder");
       }
 }
这应该做到:

System.IO.Directory.GetFileSystemEntries("C:\\Temp");

foreach (string path in System.IO.Directory.GetFileSystemEntries("C:\\Temp"))
{
      if (File.Exists(path))
      {
          Console.WriteLine("im a file");
      }
      else
      {
          Console.WriteLine("im a folder");
       }
 }

您可以使用Directory.Exists/File.Exists,也可以直接使用

Directory.GetFiles();
Directory.GetDirectories();
MSDN:


您可以使用Directory.Exists/File.Exists,也可以直接使用

Directory.GetFiles();
Directory.GetDirectories();
MSDN:


您可以使用FileAttributes发现字符串是否表示文件或目录

   foreach(string currentName in Directory.GetFileSystemEntries("C:\\AAAA")) 
   { 
       FileAttributes att = File.GetAttributes(currentName);
       if((att & FileAttributes.Directory) == FileAttributes.Directory)
           // is a directory
       else
           // is a file
   }
与File.Exist或Directory.Exist相比,使用FileAttributes只有一个缺点。
如果文件或目录不存在,它将抛出异常,但是根据上面的代码,在这种情况下发生异常的可能性很小,并且file.GetAttributes的速度非常快

您可以使用FileAttributes发现字符串是否表示文件或目录

   foreach(string currentName in Directory.GetFileSystemEntries("C:\\AAAA")) 
   { 
       FileAttributes att = File.GetAttributes(currentName);
       if((att & FileAttributes.Directory) == FileAttributes.Directory)
           // is a directory
       else
           // is a file
   }
与File.Exist或Directory.Exist相比,使用FileAttributes只有一个缺点。
如果文件或目录不存在,它将抛出异常,但是根据上面的代码,在这种情况下发生异常的可能性很小,并且file.GetAttributes的速度非常快

如果您需要以不同的方式对待文件和目录,我建议您使用GetDirectories和GetFiles分别获取它们,并根据需要进行处理。这样你就能提前知道他们在做什么

我认为这对于您描述的内容会更好,因为您可以循环所有文件并复制它们,然后循环所有目录并递归调用副本


是的,我知道这实际上并没有回答问题,但我认为它回答了如何做X的精神:

如果您需要以不同的方式对待文件和目录,我建议使用GetDirectory和GetFile分别获取它们,并酌情处理它们。这样你就能提前知道他们在做什么

我认为这对于您描述的内容会更好,因为您可以循环所有文件并复制它们,然后循环所有目录并递归调用副本


是的,我知道这实际上并没有回答问题,但我认为它回答了如何做X的精神:

这是一件非常糟糕的事情,为什么要得到所有的文件而不仅仅是支票?这是一件非常糟糕的事情,为什么要得到所有的文件而不仅仅是支票?