2

.zipこれは簡単な質問かもしれませんが、拡張子を除くフォルダ内のすべてのファイルを取得するにはどうすればよいですか。私は次のようなforeachループを持っています:

foreach (DirectoryInfo directory in directories)
{
    foreach (FileInfo file in directory.GetFiles("*.*"))
    {
    }
}

if2番目のループ内でステートメントを実行して確認する必要if (file.Name.contains("zip")) then continueがありますか、それともより良い方法がありますか?

4

5 に答える 5

6

FileInfoExtension各ファイルの拡張子を表す文字列を提供するプロパティがあります。

編集: このLINQクエリを使用して、コードを簡略化できます。

IEnumerable<FileInfo> files = directory.GetFiles("*.*").Where(file => !string.Equals(file.Extension, ".zip", StringComparison.InvariantCultureIgnoreCase));
于 2012-04-16T10:04:51.713 に答える
3

.NET 4.0以降では、次を使用できますDirectory.EnumerateFiles

List<string> files = Directory.EnumerateFiles("C:\\temp", "*.*", 
                                              SearchOption.AllDirectories)
                       .Where(n => Path.GetExtension(n) != ".txt").ToList();
于 2012-04-16T10:08:50.133 に答える
1

名前のzipをチェックしないでください。その中で使用FileInfo.Extensionまたはパス名はPath.GetExtension(filename)すべきではありません.zip

于 2012-04-16T10:05:24.963 に答える
1

このコードを試すことができます

public staticList<FileInfo> GetFiles(string folder, string includeMask, string     excludeMask, SortOrder sortOrder, SearchOption searchOption)
{
DirectoryInfo folderDirectoryInfo = newDirectoryInfo(folder);
List<FileInfo> files = newList<FileInfo>(folderDirectoryInfo.GetFiles(includeMask,  searchOption));

stringexcludeMaskRegEx = FileSystemHelper.WildcardToRegex(excludeMask);
// exclude files
files = (fromfile infiles
         where!Regex.IsMatch(file.Name, excludeMaskRegEx) 
         selectfile).ToList<FileInfo>();
if(files.Count > 0)
{
    switch(sortOrder)
    {
        //somecode
    }
  }
  returnfiles;
  }
于 2012-04-16T10:08:12.583 に答える
0

LINQを使用する:

static List<string> GetNonZipFiles(string path)
        {
            return Directory.GetFiles(path).Where(x => !x.EndsWith(".zip")).ToList();
        }
于 2012-04-16T10:18:58.493 に答える