Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中将不同的文件扩展名文件从一个位置移动到另一个位置#_C#_Asp.net_Linq_Linq To Sql_Linq To Entities - Fatal编程技术网

C# 在c中将不同的文件扩展名文件从一个位置移动到另一个位置#

C# 在c中将不同的文件扩展名文件从一个位置移动到另一个位置#,c#,asp.net,linq,linq-to-sql,linq-to-entities,C#,Asp.net,Linq,Linq To Sql,Linq To Entities,我需要根据文件类型扩展名移动文件,换句话说,源文件包含所有类型的扩展名文件,我需要过滤以下文件类型“.xml”、“.dat”、“.txt”、“.csv”、“.zip”、“.doc”,并且只将这些文件移动到目标位置使用Path.GetExtension() 您的代码: var outputDirectory = new DirectoryInfo(@"G:\Local\Syndicationtest"); var sourceDirectory = new DirectoryInfo(@"G:\

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

使用
Path.GetExtension()

您的代码:

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

}
var outputDirectory=newdirectoryinfo(@“G:\Local\Syndicationtest”);
var sourceDirectory=new DirectoryInfo(@“G:\Local\Syndicationtest”);
FileInfo[]sourceFiles=sourceDirectory.GetFiles();
var扩展=新列表{.xml“,.dat“,.txt“,.csv“,.zip“,.doc”};
foreach(sourceFiles中的FileInfo项)
{        
if(扩展名.包含(项目扩展名))
{
复制(项,输出目录);
FileHelper.Move(FileHelper.Zip(item),newdirectoryinfo(@“G:\Local\Syndicationtest\History”);
}   
}
如果您想使用LINQ,最好使用Michael Perrenoud的解决方案。

那么这一点如何:

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"));
    }   
}
var ext=newlist{.xml“,.dat“,.txt“,.csv“,.zip“,.doc”};
var sourceFiles=sourceDirectory.GetFiles()
其中(f=>ext.Contains(f.Extension.ToLower());
这解决了两件事:

  • 给你你想要的清单
  • 使您摆脱
    DirectoryInfo.GetFiles(stringsearchpattern)
    重载时存在的三字符扩展名问题

  • 您可以在文件路径中获取
    LastIndex
    ,并一直读取到最后以获取扩展名

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

    试试这个:

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

    您需要更改目录名

                        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"));
                            }
                        }
    
    类程序
    {
    公共静态字符串OutputDirectry=@“C:DebugCopy”;
    公共静态void Main()
    {
    var fileextensions=新列表
    {
    “.xml”,
    “.dat”,
    “.txt”,
    “.csv”,
    “.zip”,
    “.doc”
    };
    foreach(目录.EnumerateFiles(@“C:Debug”)中的变量路径)
    .Where(path=>fileextensions.Contains(path.GetExtension(path.ToLower()))
    Copy(path,path.Combine(outputdirectry,path.GetFileName(path));
    }
    }
    
    if(acceptableExtensions.Contains(item.Extension))//做任何你想做的事
    否,使用Path.GetExtension()如果文件扩展名包含的字符数大于或小于3个怎么办<代码>项已经是字符串。感谢您的输入。1.OP只想用3个字符进行检查,这就是为什么我使用了3个字符(感谢您提出使用Path.GetExtension()的建议,我将使用它)2.是项是字符串,我已编辑了我的答案。@Sudhakar如果我们有文件名,如abcd.lll.dat或xxyy.2013.11.12_14.43.7574.csv,那么它将是.dat和.csv,这就是为什么我要使用LastIndexof点运算符,请告诉我是否需要更多。@user2271011,请查看我的编辑。我不习惯使用
    DirectoryInfo
    界面,只是把它弄糊涂了。@user2271011,很高兴我能帮上忙!字符串比较呢?如果分机是另一种情况怎么办?@traemore,打得好。我检查了M$FT代码,他们没有降低它。谢谢好的,您有一个
    FileInfo
    ,它有一个
    扩展名
    属性。更容易。:)编辑。
    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)));
        }
    }