给定一个Path,如何确定它是目录还是文件

时间:2012-06-21 10:14:52

标签: c#

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

目录C:\ AAAA包含5个其他目录(没有其他子目录的子目录)和7个文件。

我打电话的时候:

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

返回一个字符串数组。它将包含以dictonary排序顺序排序的条目。所以当我调用for-each循环时:

foreach(string path in System.IO.Directory.GetFileSystemEntries("C:\\AAAA"))
{
    //how to determine path is dictonay or file??
}

所以从System.IO.Directory.GetFileSystemEntries(“C:\ AAAA”)返回的数组中,如何确定给定路径是文件路径还是目录?

7 个答案:

答案 0 :(得分:2)

使用Directory.ExistsFile.Exists

进行检查

答案 1 :(得分:2)

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

Directory.GetFiles();
Directory.GetDirectories();

MSDN:

答案 2 :(得分:2)

您可以使用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
   }

使用FileAttributes对File.Exist或Directory.Exist只有一个缺点 如果文件或目录不存在,它将抛出一个异常,但根据你上面的代码,在这种情况下几乎没有可能产生和File.GetAttributes非常快速的比较。

答案 3 :(得分:1)

您可以尝试Directory.Exists

bool isDir = Directory.Exists(path)

FileSystemInfo.Attributes

var info = new FileInfo(path);
bool isDir = (info.Attributes & FileAttributes.Directory) == FileAttributes.Directory;

File.GetAttributes也可以获取这些属性。

答案 4 :(得分:1)

foreach(string path in System.IO.Directory.GetFileSystemEntries("C:\\AAAA"))
{
    // get the file attributes for file or directory
    FileAttributes attr = File.GetAttributes(path);

    //detect whether its a directory or file
    if((attr & FileAttributes.Directory) == FileAttributes.Directory)
        MessageBox.Show("Its a directory");
    else
        MessageBox.Show("Its a file");
}

答案 5 :(得分:0)

应该这样做:

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");
       }
 }

答案 6 :(得分:0)

如果您需要以不同方式处理文件和指令,我建议您使用GetDirectoriesGetFiles单独处理它们并根据需要进行处理。这样你就可以提前知道它们是什么了。

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

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