2012-06-21 66 views
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”)的阵列

那么,如何确定给定的路径是到文件路径或者它是一个目录?

+1

http://stackoverflow.com/questions/1395205/better-way-to-check-if-path-is-a-file-or-a-directory-c-net –

回答

1

您可以发现字符串是否代表使用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的速度非常快。

2

检查使用Directory.ExistsFile.Exists

0

这应该做到这一点:

​​
2

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

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

MSDN:

+0

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

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

如果您需要以不同方式处理文件和目录,我建议分别使用GetDirectoriesGetFiles来分别处理它们,并根据需要对它们进行处理。这样你就知道他们提前了。

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

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

相关问题