我希望创建一个程序,在我的桌面上找到某种类型的所有文件并将它们放入特定的文件夹中,例如,我将所有带有.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();
找不到所有文件都没有成功。
答案 0 :(得分:94)
很多这些答案在我自己尝试过后确实没有用。放手一搏:
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
。
答案 1 :(得分:9)
首先关闭;最佳做法是使用
获取用户桌面文件夹string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
然后你可以找到所有类似
的文件string[] files = Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories);
请注意,使用上面的行,您将在登录用户和所有子文件夹的Desktop文件夹中找到所有扩展名为.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
答案 2 :(得分:5)
您可以尝试使用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, "....");
}