.NET- এ তৈরির তারিখ অনুসারে ফাইলগুলি পাওয়া


94

আমার একটি ফোল্ডার রয়েছে যার মধ্যে অনেকগুলি ফাইল রয়েছে। ডিরেক্টরিতে ফাইলের নামগুলি তৈরির তারিখ / সময় অনুসারে বাছাই করার কোনও সহজ উপায় আছে কি?

আমি যদি ব্যবহার করি তবে Directory.GetFiles()এটি তাদের ফাইলের নাম অনুসারে বাছাই করা ফাইলগুলি ফিরিয়ে দেয়।


আমি একটি অনুরূপ প্রশ্ন পাওয়া গেছে: stackoverflow.com/questions/52842/sorting-directory-getfiles
Senseful

4
গেটফাইলস () বাছাই করে না , নাম দিয়ে তাদের অর্ডার দেওয়া দুর্ঘটনা। নিজেকে বাছাই করুন।
হ্যানস প্যাস্যান্ট

উত্তর:


203

এটি আপনার জন্য কাজ করতে পারে।

using System.Linq;

DirectoryInfo info = new DirectoryInfo("PATH_TO_DIRECTORY_HERE");
FileInfo[] files = info.GetFiles().OrderBy(p => p.CreationTime).ToArray();
foreach (FileInfo file in files)
{
    // DO Something...
}

'System.IO.FileInfo []' এর 'অর্ডারবি'-এর সংজ্ঞা নেই
উমায়ের জব্বার

4
এটি একটি এক্সটেনশান পদ্ধতি ... এমএসডিএন.মাইক্রোসফটকম /en-us/library/bb383977.aspx
আইভো

14
আমি মনে করি ToArray () পদ্ধতিতে কল করার দরকার নেই।
আইভো

এক্সটেনশন পদ্ধতি / লিনকিউ ব্যবহার না করেইআইআইডিএস কারণ আমি লক্ষ্য করছি ing নেট 2.0
প্রতীক

10
ক্রিয়েশনটাইমের পরিবর্তে তথ্য.গেটফায়ার্স () ব্যবহার করুন অর্ডারবাই (পি => পি। ক্রিয়েশনটাইম ইউটিসি) যদি কোনও সুযোগ থাকে তবে ডিরেক্টরিতে থাকা ফাইলগুলি বিভিন্ন টাইম জোনে তৈরি করা হতে পারে (দিবালোকের সঞ্চয় সময় সহ)
স্টিভ

46

আপনি লিনক ব্যবহার করতে পারেন

var files = Directory.GetFiles(@"C:\", "*").OrderByDescending(d => new FileInfo(d).CreationTime);

4
DirectoryInfo সমাধান অনেক দ্রুত তারপর এই (বিশেষত জন্য নেটওয়ার্ক পথ) হয়
জিং

9

আপনি যদি লিনকিউ ব্যবহার করতে না চান

// Get the files
DirectoryInfo info = new DirectoryInfo("path/to/files"));
FileInfo[] files = info.GetFiles();

// Sort by creation-time descending 
Array.Sort(files, delegate(FileInfo f1, FileInfo f2)
{
    return f2.CreationTime.CompareTo(f1.CreationTime);
});

4

এটি সর্বশেষ পরিবর্তিত তারিখ এবং তার বয়স ফিরিয়ে দেয়।

DateTime.Now.Subtract(System.IO.File.GetLastWriteTime(FilePathwithName).Date)

1

@ জিং: "ডাইরেক্টরিআইএনফো সমাধানটি এরপরে দ্রুত (বিশেষত নেটওয়ার্কের পথে) দ্রুত হয়"

আমি এটি নিশ্চিত করতে পারি না। দেখে মনে হচ্ছে ডিরেক্টরি G গেটফায়ার্স একটি ফাইল সিস্টেম বা নেটওয়ার্ক ক্যাশে ট্রিগার করে। প্রথম অনুরোধটি কিছুটা সময় নেয়, তবে নতুন ফাইল যুক্ত করা হলেও নিম্নলিখিত অনুরোধগুলি আরও দ্রুত হয়। আমার পরীক্ষায় আমি একটি ডিরেক্টরী.গেটফায়ালস এবং একটি তথ্য করেছিলাম। একই প্যাটার্ন সহ গেটফায়ার এবং উভয়ই সমানভাবে চালিত

GetFiles  done 437834 in00:00:20.4812480
process files  done 437834 in00:00:00.9300573
GetFiles by Dirinfo(2)  done 437834 in00:00:20.7412646

1

পারফরম্যান্স যদি কোনও সমস্যা হয় তবে আপনি এই আদেশটি MS_DOS এ ব্যবহার করতে পারেন:

dir /OD >d:\dir.txt

এই কমান্ডটি ** d: ** এ dir.txt ফাইল উত্পন্ন করে যা সমস্ত ফাইল তারিখ অনুসারে বাছাই করে root এবং তারপরে আপনার কোড থেকে ফাইলটি পড়ুন। এছাড়াও, আপনি * এবং? এর মাধ্যমে অন্যান্য ফিল্টার যুক্ত করেন।


0
            DirectoryInfo dirinfo = new DirectoryInfo(strMainPath);
            String[] exts = new string[] { "*.jpeg", "*.jpg", "*.gif", "*.tiff", "*.bmp","*.png", "*.JPEG", "*.JPG", "*.GIF", "*.TIFF", "*.BMP","*.PNG" };
            ArrayList files = new ArrayList();
            foreach (string ext in exts)
                files.AddRange(dirinfo.GetFiles(ext).OrderBy(x => x.CreationTime).ToArray());
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.