【问题标题】:Moving dfferent File extension files from one location to other location in c#在c#中将不同的文件扩展名文件从一个位置移动到另一个位置
【发布时间】:2013-11-12 21:00:31
【问题描述】:
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”,并且只将这些文件移动到目标位置

【问题讨论】:

  • if (acceptableExtensions.Contains(item.Extension)) //do whatever you want

标签: c# asp.net linq linq-to-sql linq-to-entities


【解决方案1】:

那么这个怎么样:

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) 重载时存在的三字符扩展问题。

【讨论】:

  • @user2271011,请查看我的编辑。我不习惯使用DirectoryInfo 接口,只是弄糊涂了。
  • @user2271011,很高兴能为您提供帮助!
  • 字符串比较呢?如果扩展名不同怎么办?
  • @TraeMoore,好电话。我检查了 M$FT 代码,他们没有降低它。谢谢!
【解决方案2】:

使用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 的解决方案。

【讨论】:

  • 好的,你有一个FileInfo,它有一个Extension 属性。更容易。 :) 已编辑。
【解决方案3】:

给你..

您需要更改目录名称。

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)));
    }
}

【讨论】:

    【解决方案4】:

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

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

    试试这个:

                        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"));
                            }
                        }
    

    【讨论】:

    • 不,使用 Path.GetExtension()
    • 如果文件扩展名包含多于或少于 3 个字符怎么办? item 已经是一个字符串了。
    • 感谢您的意见。 1.OP 只想检查 3 个字符,这就是我使用 3 的原因(无论如何感谢您提供使用 Path.GetExtension() 的建议,我将使用它) 2.是的项目是字符串,我已经编辑了我的答案。
    • @Sudhakar 如果我们有类似 abcd.llll.dat 或 xxyyy.2013.11.12_14.43.7574.csv 的文件名怎么办
    • 那么它将是 .dat 和 .csv 这就是我使用 LastIndexof 点运算符的原因,如果需要更多信息,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    相关资源
    最近更新 更多