web-dev-qa-db-ja.com

フォルダー内のすべてのファイルを検索する

デスクトップ上の特定の種類のすべてのファイルを検出し、それらを特定のフォルダーに配置するプログラムを作成しようとしています。たとえば、.txtのすべてのファイルをTextフォルダーに入れます。

これを達成する最善の方法は何ですか?ありがとう。

私はこれを試しました:

string startPath = @"%userprofile%/Desktop";
string[] oDirectories = Directory.GetDirectories(startPath, "");
Console.WriteLine(oDirectories.Length.ToString());
foreach (string oCurrent in oDirectories)
    Console.WriteLine(oCurrent);
Console.ReadLine();

すべてのファイルを見つけることができませんでした。

45
Oliver K

これらの回答の多くは、実際に試してみたため、実際には機能しません。これを試してください:

string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
DirectoryInfo d = new DirectoryInfo(filepath);

foreach (var file in d.GetFiles("*.txt"))
{
      Directory.Move(file.FullName, filepath + "\\TextFiles\\" + file.Name);
}

デスクトップ上のすべての.txtファイルをTextFilesフォルダーに移動します。

97
dtsg

最初に;ベストプラクティスは、ユーザーのデスクトップフォルダを取得することです

_string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
_

その後、次のようなものですべてのファイルを見つけることができます

_string[] files = Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories);
_

上記の行を使用すると、ログインしているユーザーとすべてのサブフォルダーのデスクトップフォルダーに.txt拡張子を持つすべてのファイルが見つかります。

次に、上記のコレクションを列挙することにより、ファイルをコピーまたは移動できます

_// For copying...
foreach (string s in files)
{
   File.Copy(s, "C:\newFolder\newFilename.txt");
}

// ... Or for moving
foreach (string s in files)
{
   File.Move(s, "C:\newFolder\newFilename.txt");
}
_

Copy()(またはMove())操作にファイル名を含める必要があることに注意してください。したがって、上記の例のようにすべてのファイルに同じ名前を付けるのではなく、少なくとも処理している拡張子のファイル名を決定する方法を見つける必要があります。

それを念頭に置いて、DirectoryInfoおよびFileInfoクラスもチェックアウトできます。これらは同様の方法で機能しますが、パス/ファイル名、拡張子などに関する情報をより簡単に取得できます

詳細については、これらを確認してください。

http://msdn.Microsoft.com/en-us/library/system.io.directory.aspx

http://msdn.Microsoft.com/en-us/library/ms143316.aspx

http://msdn.Microsoft.com/en-us/library/system.io.file.aspx

9
Gerald Versluis

Directory.GetFilesを試して、パターンを修正できます

 string[] files = Directory.GetFiles(@"c:\", "*.txt");

 foreach (string file in files)
 {
    File.Copy(file, "....");
 }

 Or Move

 foreach (string file in files)
 {
    File.Move(file, "....");
 }     

http://msdn.Microsoft.com/en-us/library/wz42302f

5
Aghilas Yakoub