67

デスクトップ上の特定の種類のすべてのファイルを検索し、それらを特定のフォルダーに配置するプログラムを作成しようとしています。たとえば、.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();

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

4

3 に答える 3

130

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

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

于 2012-08-08T09:40:32.970 に答える
12

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

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())操作にファイル名を含める必要があることに注意してください。したがって、少なくとも処理している拡張子のファイル名を判別する方法を見つける必要があり、上記の例のようにすべてのファイルに同じ名前を付ける必要はありません。

それを念頭に置いて、クラスDirectoryInfoFileInfoクラスをチェックすることもできます。これらは同じように機能しますが、パス/ファイル名、拡張子などに関する情報をより簡単に取得できます。

詳細については、以下を確認してください。

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

于 2012-08-08T09:14:18.690 に答える
7

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

于 2012-08-08T09:09:21.463 に答える