1

我需要在目录中复制文件和目录。假设只有一层。

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

当我打电话时:

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

它返回一个字符串数组。它将包含按字典排序顺序排序的条目。因此,当我调用 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") 返回的数组中,如何确定给定路径是文件路径还是目录?

4

7 回答 7

2

检查使用Directory.ExistsFile.Exists

于 2012-06-21T10:16:40.677 回答
2

你可以试试Directory.Exists

bool isDir = Directory.Exists(path)

FileSystemInfo.Attributes

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

File.GetAttributes也可以为您提供这些属性。

于 2012-06-21T10:17:01.847 回答
2

您可以使用 Directory.Exists / File.Exists 或只是做

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

MSDN:

于 2012-06-21T10:19:47.987 回答
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 比较快。

于 2012-06-21T10:21:31.190 回答
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");
}
于 2012-06-21T10:19:50.667 回答
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");
       }
 }
于 2012-06-21T10:19:45.283 回答
0

如果您需要以不同的方式处理文件和目录,我建议您分别使用它们GetDirectoriesGetFiles酌情处理它们。这样你就可以提前知道他们是什么。

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

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

于 2012-06-21T10:22:21.050 回答