1

ディレクトリ内のファイルとディレクトリをコピーする必要があります。レベルが 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

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 に対する欠点が 1 つだけあります。
ファイルまたはディレクトリが存在しない場合、例外がスローされますが、上記のコードに基づいて、この状況で発生する可能性はほとんどなく、File.GetAttributes は非常に高速に比較されます。

于 2012-06-21T10:21:31.190 に答える
2

Directory.Existsまたはを使用して確認しますFile.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 に答える
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

ファイルとディレクトリを異なる方法で処理する必要がある場合は、それらを別々に使用しGetDirectoriesGetFiles、必要に応じて処理することをお勧めします。そうすれば、彼らが何であるかを前もって知ることができます。

すべてのファイルをループしてコピーしてから、すべてのディレクトリをループしてコピーを再帰的に呼び出すことができるため、これは説明している内容に適していると思います。

ええ、私はこれが実際に尋ねられた質問に答えないことを知っています、しかし私はそれがXをする方法の精神に答えると思います。:)

于 2012-06-21T10:22:21.050 に答える
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 に答える