複数のフィルターを使用してDirectory.GetFiles()を呼び出すことはできますか?


353

私が使用しようとしていますDirectory.GetFiles()のような複数の種類のファイルの一覧取得する方法をmp3のとjpgのを。私は運が悪いのに次の両方を試しました:

Directory.GetFiles("C:\\path", "*.mp3|*.jpg", SearchOption.AllDirectories);
Directory.GetFiles("C:\\path", "*.mp3;*.jpg", SearchOption.AllDirectories);

これを1回の呼び出しで行う方法はありますか?


3
補足として、拡張機能のフィルタリングにGetFiles検索パターンを使用することは安全ではありません。たとえば、2つのファイルTest1.xlsとTest2.xlsxがあり、検索パターン* .xlsを使用してxlsファイルを除外したいが、GetFilesは両方のTest1を返す場合.xlsおよびTest2.xlsx。詳細については、ノートセクションを参照してください
kiran

これを防ぐにはどうすればよいですか?
ブラケット

2
@kiranどうして安全じゃないの?それはバグというより機能のように見えます。
カイルデラニー

回答:


519

.NET 4.0以降の場合、

var files = Directory.EnumerateFiles("C:\\path", "*.*", SearchOption.AllDirectories)
            .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));

以前のバージョンの.NETの場合、

var files = Directory.GetFiles("C:\\path", "*.*", SearchOption.AllDirectories)
            .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));

編集: コメントを読んでください。Paul Farryが提案する改善と、Christian.Kが指摘する記憶/パフォーマンスの問題は、どちらも非常に重要です。


10
男、私はLINQに関してもっと頻繁に考えなければなりません。素敵な解決策!
Ken Pespisa

61
ただし、その意味を理解していることを確認してください。これにより、すべてのファイルが文字列配列で返され、指定した拡張子でフィルタリングされます。「C:\ Path」の下に多くのファイルがない場合、それは大きな問題ではないかもしれませんが、「C:\」またはそのようなもののメモリ/パフォーマンスの問題である可能性があります。
Christian.K

24
... 2年後:すばらしいコードですが、これに注意してください。.JPGで終わるファイルがある場合、作成されません。より良い追加s.ToLower().Endswith...
Stormenet、

107
そのまま使用できますs.EndsWith(".mp3", StringComparison.OrdinalIgnoreCase)
ポールファリー2010年

119
.NET 4.0で、あなたは置き換えることができることを注意Directory.GetFilesしてDirectory.EnumerateFilesmsdn.microsoft.com/en-us/library/dd383571.aspx @ Christian.Kが言及しているメモリの問題を回避あろう。
ジムミッシェル、2011

60

これはどう:

private static string[] GetFiles(string sourceFolder, string filters, System.IO.SearchOption searchOption)
{
   return filters.Split('|').SelectMany(filter => System.IO.Directory.GetFiles(sourceFolder, filter, searchOption)).ToArray();
}

私はそれをここで(コメントで)見つけました:http : //msdn.microsoft.com/en-us/library/wz42302f.aspx


これにより、最高評価の回答の潜在的なメモリの落とし穴が回避されると思いますか?その場合、それはより高く評価されるべきです!
Dan W

11
@DanW最高評価の回答は確かにメモリに負担をかけますが、それはそのような問題ではないはずです。私もこの回答が好きでしたが、実際には、受け入れられた回答よりも(はるかに)遅いです。このSpeedTestを
OttO

ありがとう。遅いのは約2倍しかないことをうれしく思います。その間はそれを使い続けます。
Dan W

7
拡張機能が2つしかない場合、速度は2倍になります。X拡張のリストがある場合、X倍遅くなります。ここでは、Directory.GetFiles関数を数回呼び出していますが、他のソリューションでは1回しか呼び出されません。
Oscar Hermosilla、2016年

1
@OscarHermosilla 1つを使用Parallel.ForEachしてそれらを並行して取得できます
FindOutIslamNow

33

チェックする拡張機能のリストが多い場合は、以下を使用できます。たくさんのORステートメントを作成したくなかったので、letteの記述を変更しました。

string supportedExtensions = "*.jpg,*.gif,*.png,*.bmp,*.jpe,*.jpeg,*.wmf,*.emf,*.xbm,*.ico,*.eps,*.tif,*.tiff,*.g01,*.g02,*.g03,*.g04,*.g05,*.g06,*.g07,*.g08";
foreach (string imageFile in Directory.GetFiles(_tempDirectory, "*.*", SearchOption.AllDirectories).Where(s => supportedExtensions.Contains(Path.GetExtension(s).ToLower())))
{
    //do work here
}

これで私を助けてください... imageFileを印刷するとき、それはそれの完全なパスを与えています。どうすればそれをファイルの名前だけに縮小できますか?
Naresh、

1
System.IO.Path.GetFileName(imageFile)
jnoreiga

Path.GetExtension'* .ext'ではなく '.ext'を返します(少なくとも3.5以降)。
Nullable 2012年

2
参考:System.Linq for .where(
jnoreiga

1
潜在的な欠陥があります。内線番号を正確に3文字にする必要がある時代はもう過ぎています。でファイルに遭遇する可能性があり.abc、supportedExtensionsにが含まれて.abcdいるとします。一致しますが、一致しないはずです。修正するには:を使用supportedExtensions = ".jpg|.abcd|";.Contains(Path.GetExtension(s).ToLower() + "|")ます。つまり、テストに区切り文字を含めます。重要:区切り文字は、supportedExceptionsのLASTエントリの後にも置く必要があります。
ToolmakerSteve 2018

31

ために

var exts = new[] { "mp3", "jpg" };

あなたは出来る:

public IEnumerable<string> FilterFiles(string path, params string[] exts) {
    return
        Directory
        .EnumerateFiles(path, "*.*")
        .Where(file => exts.Any(x => file.EndsWith(x, StringComparison.OrdinalIgnoreCase)));
}
  • Directory.EnumerateFilesパフォーマンスを向上させるための新しい.NET4 を忘れないでください(Directory.EnumerateFilesとDirectory.GetFilesの違いは何ですか?
  • "IgnoreCase"は "ToLower"よりも高速でなければなりません(.EndsWith("aspx", StringComparison.OrdinalIgnoreCase)ではなく.ToLower().EndsWith("aspx")

しかし、の本当の利点はEnumerateFiles、フィルターを分割して結果をマージするとわかります。

public IEnumerable<string> FilterFiles(string path, params string[] exts) {
    return 
        exts.Select(x => "*." + x) // turn into globs
        .SelectMany(x => 
            Directory.EnumerateFiles(path, x)
            );
}

それらをグロブに変換する必要がない場合(つまり、exts = new[] {"*.mp3", "*.jpg"}すでに)は、少し速くなります。

次のLinqPadテストに基づくパフォーマンス評価(注:Perfデリゲートを10000回繰り返すだけ) https://gist.github.com/zaus/7454021

(その質問は特にLINQを要求していないため、「duplicate」から再投稿および拡張されていますSystem.IO.Directory.GetFilesの複数のファイル拡張子searchPattern


「それらをグロブに変換する必要がない場合、私は少し速くなる」とはどういう意味ですか?O(1)ですか、それともO(n)ですか(拡張子の数ではなく、ファイルの数に関して)?私はそれがO(1)(または拡張の数に関してはO(n))であり、おそらくいくつかのCPUサイクルの範囲内のどこかだと思いました...その場合、それはおそらく-パフォーマンスに関して-無視できる
BatteryBackupUnit

@BatteryBackupUnitええ、グロブ対strの差が2 msの拡張に対して10k担当者がいるため、技術的には無視できます(perf結果リンクを参照)。差; 「単純な使用法」(つまり.FilterFiles(path, "jpg", "gif"))が「明示的なグロブ」(つまり.FilterFiles(path, "*.jpg", "*.gif"))よりも優れているかどうかを判断するのは、あなたに任せます。
drzaus 14

完璧、ありがとう。すみません、なんとかしてそのgithubリンクをスキップしました。多分私は自分の画面の色設定を変更する必要があります:)
BatteryBackupUnit

これは.JPGや.MKVなどの大文字の拡張子をサポートしていますか?
Wahyu

1
SelectMany溶液による欠陥は、それが渡されたファイルごとに拡張子を一度すべてのファイルを反復処理することである。
26の17

16

古い質問ですが、LINQ:(.NET40 +)

var files = Directory.GetFiles("path_to_files").Where(file => Regex.IsMatch(file, @"^.+\.(wav|mp3|txt)$"));

3
良いアイデア。を使用file.ToLower()して、大文字の拡張子を簡単に照合することを検討してください。そして、なぜ最初の拡張子を抽出し、その正規表現は、パス全体を調査する必要がないではない: Regex.IsMatch(Path.GetExtension(file).ToLower(), @"\.(wav|mp3|txt)");
ToolmakerSteve

13

メモリやパフォーマンスのオーバーヘッドがなく、非常にエレガントであると思われる降下ソリューションもあります。

string[] filters = new[]{"*.jpg", "*.png", "*.gif"};
string[] filePaths = filters.SelectMany(f => Directory.GetFiles(basePath, f)).ToArray();

1
新しい文字列変数とSplit関数を使用して、未知の無制限の数の拡張子を受け入れるように編集できると思います。しかし、それでも、これはjnoreigaのソリューションよりどのように優れていますか?速いですか?少ないメモリ消費?
ブラケット2017

1
トレードオフがあります。このアプローチでは、フィルターごとに1つずつGetFilesを複数回呼び出します。これらの複数の呼び出し、状況によってはかなりの「パフォーマンスオーバーヘッド」になる可能性があります。各GetFilesが一致するファイルパスを持つ配列のみを返すという重要な利点があります。私はこれはと期待する通常の良好なパフォーマンスの結果、多分なる優れた性能が、ニーズがテストすること。GetFilesがEnumerateFilesよりも大幅に高速である場合、これがまだ最善の方法である可能性があります。また、IEnumerableを直接使用できる場合は、最後の ".ToArray()"を省略できることにも注意してください。
ToolmakerSteve 2018

11

Linqを使用するもう1つの方法ですが、すべてを返してメモリでフィルタリングする必要はありません。

var files = Directory.GetFiles("C:\\path", "*.mp3", SearchOption.AllDirectories).Union(Directory.GetFiles("C:\\path", "*.jpg", SearchOption.AllDirectories));

これは実際にはへの2回の呼び出しGetFiles()ですが、質問の趣旨と一致しており、1つの列挙型で返します。


では、なぜLinqを使うのですか?Listとaddrangeを使用するよりも高速でしょうか?
ThunderGr 2013年

1
何が速くなるかわからないし、それが重要な質問だとは思わない。この問題を解決するためにコードを使用するほとんどすべての場所では、パフォーマンスの違いはごくわずかです。問題は、将来のコードの保守を容易にするために、何がより読みやすいかということです。これは1つのソース行に入れられるので、これは合理的な答えだと思います。これは、質問が望むものの一部であり、必要な呼び出しがその行の意図を明確に表現していると思います。listとaddrangeは、同じことを達成するために複数のステップで煩わしいです。
Dave Rael、2013年

7

いいえ。以下を試してください:

List<string> _searchPatternList = new List<string>();
    ...
    List<string> fileList = new List<string>();
    foreach ( string ext in _searchPatternList )
    {
        foreach ( string subFile in Directory.GetFiles( folderName, ext  )
        {
            fileList.Add( subFile );
        }
    }

    // Sort alpabetically
    fileList.Sort();

    // Add files to the file browser control    
    foreach ( string fileName in fileList )
    {
        ...;
    }

取得元:http : //blogs.msdn.com/markda/archive/2006/04/20/580075.aspx


7

しましょう

var set = new HashSet<string> { ".mp3", ".jpg" };

その後

Directory.GetFiles(path, "*.*", SearchOption.AllDirectories)
         .Where(f => set.Contains(
             new FileInfo(f).Extension,
             StringComparer.OrdinalIgnoreCase));

または

from file in Directory.GetFiles(path, "*.*", SearchOption.AllDirectories)
from ext in set
where String.Equals(ext, new FileInfo(file).Extension, StringComparison.OrdinalIgnoreCase)
select file;

getfilesには、オーバーロードuが投稿されていません。
nawfal

5

.Where.NET Framework 2.0でプログラミングしているため、メソッドを使用できません(Linqは.NET Framework 3.5以降でのみサポートされています)。

以下のコードは大文字と小文字を区別しません(そのため、.CaBまたは.cabリストされます)。

string[] ext = new string[2] { "*.CAB", "*.MSU" };

foreach (string found in ext)
{
    string[] extracted = Directory.GetFiles("C:\\test", found, System.IO.SearchOption.AllDirectories);

    foreach (string file in extracted)
    {
        Console.WriteLine(file);
    }
}

4

次の関数は、コンマで区切られた複数のパターンを検索します。除外を指定することもできます。たとえば、「!web.config」はすべてのファイルを検索し、「web.config」を除外します。パターンを混在させることができます。

private string[] FindFiles(string directory, string filters, SearchOption searchOption)
{
    if (!Directory.Exists(directory)) return new string[] { };

    var include = (from filter in filters.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries) where !string.IsNullOrEmpty(filter.Trim()) select filter.Trim());
    var exclude = (from filter in include where filter.Contains(@"!") select filter);

    include = include.Except(exclude);

    if (include.Count() == 0) include = new string[] { "*" };

    var rxfilters = from filter in exclude select string.Format("^{0}$", filter.Replace("!", "").Replace(".", @"\.").Replace("*", ".*").Replace("?", "."));
    Regex regex = new Regex(string.Join("|", rxfilters.ToArray()));

    List<Thread> workers = new List<Thread>();
    List<string> files = new List<string>();

    foreach (string filter in include)
    {
        Thread worker = new Thread(
            new ThreadStart(
                delegate
                {
                    string[] allfiles = Directory.GetFiles(directory, filter, searchOption);
                    if (exclude.Count() > 0)
                    {
                        lock (files)
                            files.AddRange(allfiles.Where(p => !regex.Match(p).Success));
                    }
                    else
                    {
                        lock (files)
                            files.AddRange(allfiles);
                    }
                }
            ));

        workers.Add(worker);

        worker.Start();
    }

    foreach (Thread worker in workers)
    {
        worker.Join();
    }

    return files.ToArray();

}

使用法:

foreach (string file in FindFiles(@"D:\628.2.11", @"!*.config, !*.js", SearchOption.AllDirectories))
            {
                Console.WriteLine(file);
            }

4
List<string> FileList = new List<string>();
DirectoryInfo di = new DirectoryInfo("C:\\DirName");

IEnumerable<FileInfo> fileList = di.GetFiles("*.*");

//Create the query
IEnumerable<FileInfo> fileQuery = from file in fileList
                                  where (file.Extension.ToLower() == ".jpg" || file.Extension.ToLower() == ".png")
                                  orderby file.LastWriteTime
                                  select file;

foreach (System.IO.FileInfo fi in fileQuery)
{
    fi.Attributes = FileAttributes.Normal;
    FileList.Add(fi.FullName);
}

file.Extension.ToLower()悪い習慣です。
abatishchev

次に、何を使用すればよいですか?@abatishchev
Nitin Sawant 2013年

@Nitin:String.Equals(a, b, StringComparison.OrdinalIgnoreCase)
abatishchev 2013年

1
実際、file.Extension.Equals( "。jpg"、StringComparison.OrdinalIgnoreCase)が私が好むものです。.ToLowerや.ToUpperよりも高速なようです。つまり、私が検索したすべての場所で彼らは言っています。実際には、==よりも.Equalsの方が高速です。==は.Equals 呼び出してnull 確認するためです(null.Equals(null)を実行できないため)。
ThunderGr 2013年

4

.NET 2.0(Linqなし):

public static List<string> GetFilez(string path, System.IO.SearchOption opt,  params string[] patterns)
{
    List<string> filez = new List<string>();
    foreach (string pattern in patterns)
    {
        filez.AddRange(
            System.IO.Directory.GetFiles(path, pattern, opt)
        );
    }


    // filez.Sort(); // Optional
    return filez; // Optional: .ToArray()
}

次にそれを使用します:

foreach (string fn in GetFilez(path
                             , System.IO.SearchOption.AllDirectories
                             , "*.xml", "*.xml.rels", "*.rels"))
{}

4
DirectoryInfo directory = new DirectoryInfo(Server.MapPath("~/Contents/"));

//Using Union

FileInfo[] files = directory.GetFiles("*.xlsx")
                            .Union(directory
                            .GetFiles("*.csv"))
                            .ToArray();

3

それを行う別の方法を見つけました。まだ1つの操作ではありませんが、他の人がそれについてどう思うかを確認するためにそれを捨てます。

private void getFiles(string path)
{
    foreach (string s in Array.FindAll(Directory.GetFiles(path, "*", SearchOption.AllDirectories), predicate_FileMatch))
    {
        Debug.Print(s);
    }
}

private bool predicate_FileMatch(string fileName)
{
    if (fileName.EndsWith(".mp3"))
        return true;
    if (fileName.EndsWith(".jpg"))
        return true;
    return false;
}

3

どうですか

string[] filesPNG = Directory.GetFiles(path, "*.png");
string[] filesJPG = Directory.GetFiles(path, "*.jpg");
string[] filesJPEG = Directory.GetFiles(path, "*.jpeg");

int totalArraySizeAll = filesPNG.Length + filesJPG.Length + filesJPEG.Length;
List<string> filesAll = new List<string>(totalArraySizeAll);
filesAll.AddRange(filesPNG);
filesAll.AddRange(filesJPG);
filesAll.AddRange(filesJPEG);

2

必要な拡張子を1つの文字列、つまり「.mp3.jpg.wma.wmf」にして、各ファイルに必要な拡張子が含まれているかどうかを確認します。これはLINQを使用しないため、.net 2.0で動作します。

string myExtensions=".jpg.mp3";

string[] files=System.IO.Directory.GetFiles("C:\myfolder");

foreach(string file in files)
{
   if(myExtensions.ToLower().contains(System.IO.Path.GetExtension(s).ToLower()))
   {
      //this file has passed, do something with this file

   }
}

このアプローチの利点は、コードを編集せずに拡張機能を追加または削除できることです。つまり、png画像を追加するには、myExtensions = "。jpg.mp3.png"と書き込みます。


それは何を知らないs
ブラケット

2
/// <summary>
/// Returns the names of files in a specified directories that match the specified patterns using LINQ
/// </summary>
/// <param name="srcDirs">The directories to seach</param>
/// <param name="searchPatterns">the list of search patterns</param>
/// <param name="searchOption"></param>
/// <returns>The list of files that match the specified pattern</returns>
public static string[] GetFilesUsingLINQ(string[] srcDirs,
     string[] searchPatterns,
     SearchOption searchOption = SearchOption.AllDirectories)
{
    var r = from dir in srcDirs
            from searchPattern in searchPatterns
            from f in Directory.GetFiles(dir, searchPattern, searchOption)
            select f;

    return r.ToArray();
}

2

いいえ...私はあなたが望むファイルタイプと同じくらい多くの呼び出しをする必要があると信じています。

必要な拡張子を持つ文字列の配列を取る関数を自分で作成し、その配列を反復処理して必要なすべての呼び出しを行います。その関数は、私が送信した拡張子に一致するファイルの一般的なリストを返します。

それが役に立てば幸い。


1

同じ問題があり、適切な解決策が見つからなかったため、GetFilesという関数を作成しました。

/// <summary>
/// Get all files with a specific extension
/// </summary>
/// <param name="extensionsToCompare">string list of all the extensions</param>
/// <param name="Location">string of the location</param>
/// <returns>array of all the files with the specific extensions</returns>
public string[] GetFiles(List<string> extensionsToCompare, string Location)
{
    List<string> files = new List<string>();
    foreach (string file in Directory.GetFiles(Location))
    {
        if (extensionsToCompare.Contains(file.Substring(file.IndexOf('.')+1).ToLower())) files.Add(file);
    }
    files.Sort();
    return files.ToArray();
}

この関数はDirectory.Getfiles()1回だけ呼び出します。

たとえば、次のような関数を呼び出します。

string[] images = GetFiles(new List<string>{"jpg", "png", "gif"}, "imageFolder");

編集:複数の拡張子を持つ1つのファイルを取得するには、これを使用します:

/// <summary>
    /// Get the file with a specific name and extension
    /// </summary>
    /// <param name="filename">the name of the file to find</param>
    /// <param name="extensionsToCompare">string list of all the extensions</param>
    /// <param name="Location">string of the location</param>
    /// <returns>file with the requested filename</returns>
    public string GetFile( string filename, List<string> extensionsToCompare, string Location)
    {
        foreach (string file in Directory.GetFiles(Location))
        {
            if (extensionsToCompare.Contains(file.Substring(file.IndexOf('.') + 1).ToLower()) &&& file.Substring(Location.Length + 1, (file.IndexOf('.') - (Location.Length + 1))).ToLower() == filename) 
                return file;
        }
        return "";
    }

たとえば、次のような関数を呼び出します。

string image = GetFile("imagename", new List<string>{"jpg", "png", "gif"}, "imageFolder");

1

なぜこれほど多くの「ソリューション」が投稿されているのでしょうか。

GetFilesの動作に関する新人の理解が正しければ、2つのオプションしかなく、上記のソリューションのいずれかをこれらに分類できます。

  1. GetFiles、次にフィルター:高速ですが、フィルターが適用されるまでオーバーヘッドを保存するため、メモリがキラー

  2. GetFilesでフィルタリング:設定されるフィルターの速度は遅くなりますが、オーバーヘッドが保存されないため、メモリ使用量は少なくなります。
    これは、上記の投稿の1つで印象的なベンチマークで説明されています。各フィルターオプションにより、個別のGetFile操作が発生するため、ハードドライブの同じ部分が数回読み取られます。

私の意見では、オプション1)の方が優れていますが、C:\などのフォルダーでSearchOption.AllDirectoriesを使用すると、大量のメモリが使用されます。
そのため、オプション1)を使用してすべてのサブフォルダーを通過する再帰的なサブメソッドを作成します

これにより、各フォルダーで1つのGetFiles操作のみが実行され、高速になります(オプション1)。ただし、各サブフォルダーの読み取り後にフィルターが適用されるため、少量のメモリのみを使用します。各サブフォルダーの後にオーバーヘッドが削除されます。

私が間違っていたら訂正してください。私はプログラミングについてはまったく新しいと言った通りですが、最終的にこれが上手になるために、物事をより深く理解したいと思っています:)


1

VB.NETを使用している(または依存関係をC#プロジェクトにインポートした)場合、実際には、複数の拡張機能をフィルタリングできる便利なメソッドが存在します。

Microsoft.VisualBasic.FileIO.FileSystem.GetFiles("C:\\path", Microsoft.VisualBasic.FileIO.SearchOption.SearchAllSubDirectories, new string[] {"*.mp3", "*.jpg"});

VB.NETでは、これはMy-namespaceを介してアクセスできます。

My.Computer.FileSystem.GetFiles("C:\path", FileIO.SearchOption.SearchAllSubDirectories, {"*.mp3", "*.jpg"})

残念ながら、これらの便利なメソッドは、遅延評価されたバリアントをサポートしていませんDirectory.EnumerateFiles()


これは簡単に最良の答えですが、受け入れられるのははるかにハックなものです。お奨めSO。
ロビーコイン

0

私はどの解決策がより良いか分かりませんが、これを使用します:

String[] ext = "*.ext1|*.ext2".Split('|');

            List<String> files = new List<String>();
            foreach (String tmp in ext)
            {
                files.AddRange(Directory.GetFiles(dir, tmp, SearchOption.AllDirectories));
            }

0

これは、フィルタリングされたファイルを取得するシンプルでエレガントな方法です

var allowedFileExtensions = ".csv,.txt";


var files = Directory.EnumerateFiles(@"C:\MyFolder", "*.*", SearchOption.TopDirectoryOnly)
                .Where(s => allowedFileExtensions.IndexOf(Path.GetExtension(s)) > -1).ToArray(); 

-1

または、拡張子の文字列をStringに変換することもできます^

vector <string>  extensions = { "*.mp4", "*.avi", "*.flv" };
for (int i = 0; i < extensions.size(); ++i)
{
     String^ ext = gcnew String(extensions[i].c_str());;
     String^ path = "C:\\Users\\Eric\\Videos";
     array<String^>^files = Directory::GetFiles(path,ext);
     Console::WriteLine(ext);
     cout << " " << (files->Length) << endl;
}

2
これはc ++ではなくc ++です
ブラケットは

-1

GetFiles検索パターンを使用して拡張機能をフィルタリングするのは安全ではありません!! たとえば、2つのファイルTest1.xlsとTest2.xlsxがあり、検索パターン* .xlsを使用してxlsファイルをフィルターで除外したいが、GetFilesがTest1.xlsとTest2.xlsxの両方を返すいくつかの一時ファイルが突然正しいファイルとして扱われた環境。検索パターンは* .txtで、一時ファイルの名前は* .txt20181028_100753898だったため、検索パターンは信頼できないため、ファイル名にも追加のチェックを追加する必要があります。


質問には答えません。
ロビーコイン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.