0
var outputDirectory = new DirectoryInfo(@"G:\Local\Syndicationtest");
var sourceDirectory = new DirectoryInfo(@"G:\Local\Syndicationtest");
var sourceFiles = sourceDirectory.GetFiles();
foreach (var item in sourceFiles)
{
    FileHelper.Copy(item, outputDirectory);
    FileHelper.Move(FileHelper.Zip(item), new DirectoryInfo(@"G:\Local\Syndicationtest\History"));

}

我需要根据文件类型扩展名移动文件,换句话说源文件包含所有类型的扩展名文件,我需要过滤以下“.xml”、“.dat”、“.txt”、“.csv”的文件类型"、".zip"、".doc" 并且仅将这些文件移动到目标位置

4

4 回答 4

2

那么这个怎么样:

var ext = new List<string> { ".xml", ".dat", ".txt", ".csv", ".zip", ".doc" };
var sourceFiles = sourceDirectory.GetFiles()
                                 .Where(f => ext.Contains(f.Extension.ToLower()));

这解决了两件事:

  1. 给你你想要的清单。
  2. 让您远离DirectoryInfo.GetFiles(string searchPattern)过载存在的三个字符扩展问题。
于 2013-11-12T21:05:35.583 回答
0

利用Path.GetExtension()

MSDN

你的代码:

var outputDirectory = new DirectoryInfo(@"G:\Local\Syndicationtest");
var sourceDirectory = new DirectoryInfo(@"G:\Local\Syndicationtest");
FileInfo[] sourceFiles = sourceDirectory.GetFiles();
var extensions = new List<string> { ".xml", ".dat", ".txt", ".csv", ".zip", ".doc" };

foreach (FileInfo item in sourceFiles)
{        
    if(extensions.Contains(item.Extension))
    {
        FileHelper.Copy(item, outputDirectory);
        FileHelper.Move(FileHelper.Zip(item), new DirectoryInfo(@"G:\Local\Syndicationtest\History"));
    }   
}

如果您想使用 LINQ,则首选 Michael Perrenoud 的解决方案。

于 2013-11-12T21:03:54.237 回答
0

干得好..

您将需要更改目录名称。

class Program 
{
    public static string outputDirecotry = @"C:DebugCopy";

    public static void Main()
    {
        var fileExtenstions = new List<string>
            {
                ".xml",
                ".dat",
                ".txt",
                ".csv",
                ".zip",
                ".doc"
            };

        foreach (var path in Directory.EnumerateFiles(@"C:Debug")
                 .Where(path => fileExtenstions.Contains(Path.GetExtension(path).ToLower())))

            File.Copy(path , Path.Combine(outputDirecotry , Path.GetFileName(path)));
    }
}
于 2013-11-12T21:17:40.897 回答
-2

您可以在 filePath 中获取LastIndexof.并读取到最后以获取扩展名。

然后您可以使用所需的扩展集进行验证。

尝试这个:

                    var outputDirectory = new DirectoryInfo(@"G:\Local\Syndicationtest");
                    var sourceDirectory = new DirectoryInfo(@"G:\Local\Syndicationtest");
                    String[] FileExt = new String[] { ".xml", ".dat", ".txt", ".csv", ".zip", ".doc" };
                    var sourceFiles = sourceDirectory.GetFiles();

                    foreach (var item in sourceFiles)
                    {
                        if ((item.Contains(".")) && (FileExt.Contains(item.Substring(item.LastIndexOf("."), 4))))
                        {
                            FileHelper.Copy(item, outputDirectory);
                            FileHelper.Move(FileHelper.Zip(item), new DirectoryInfo(@"G:\Local\Syndicationtest\History"));
                        }
                    }
于 2013-11-12T21:10:07.577 回答