سؤال

ولست بحاجة للبحث في محرك الأقراص (C :، D: الخ) لنوع ملف partuicular (تمديد مثل. XML و csv و .xls). كيف يمكنني التشكيل بحث عودي إلى حلقة كافة الدلائل والدلائل الداخلية والعودة المسار الكامل من حيث ملف (ق) هي؟ أو أين يمكنني الحصول على معلومات حول هذا؟

وVB.NET أو C #

والشكر

وتحرير ~ أنا على التوالي في بعض الأخطاء مثل غير قادر على الوصول إلى وصول حجم النظام نفى الخ لا أحد يعرف أين أستطيع أن أرى بعض التعليمات البرمجية smaple على تنفيذ بحث ملف؟ أنا فقط بحاجة للبحث في محرك الأقراص المحدد والعودة إلى المسار الكامل من نوع الملف لكافة الملفات وجدت.

هل كانت مفيدة؟

المحلول

وماذا عن هذا؟ أنه يتجنب استثناء في كثير من الأحيان ألقاها البحث العودية مدمجة (أي تحصل على رفض الوصول إلى مجلد واحد، ويموت بحث كله)، ويتم تقييم بتكاسل (أي أنه يعود النتائج بمجرد أن يجد لهم، بدلا من التخزين المؤقت 2000 النتائج). يتيح سلوك كسول على بناء استجابة معهد اليونسكو للإحصاء وغيرها، وأيضا يعمل بشكل جيد مع LINQ (خاصة First()، Take()، الخ).

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
static class Program { // formatted for vertical space
    static void Main() {
        foreach (string match in Search("c:\\", "*.xml")) {
            Console.WriteLine(match);
        }
    }
    static IEnumerable<string> Search(string root, string searchPattern) {
        Queue<string> dirs = new Queue<string>();
        dirs.Enqueue(root);
        while (dirs.Count > 0) {
            string dir = dirs.Dequeue();

            // files
            string[] paths = null;
            try {
                paths = Directory.GetFiles(dir, searchPattern);
            } catch { } // swallow

            if (paths != null && paths.Length > 0) {
                foreach (string file in paths) {
                    yield return file;
                }
            }

            // sub-directories
            paths = null;
            try {
                paths = Directory.GetDirectories(dir);
            } catch { } // swallow

            if (paths != null && paths.Length > 0) {
                foreach (string subDir in paths) {
                    dirs.Enqueue(subDir);
                }
            }
        }
    }
}

نصائح أخرى

System.IO.Directory.GetFiles(@"c:\", "*.xml", SearchOption.AllDirectories);

ويبدو أن recls مكتبة - لتقف على تفصيل ursive <م> ليرة سورية - لديها الآن نقية التنفيذ. NET . أنا فقط قرأت عن ذلك في الدكتور Dobb في .

وسوف تستخدم على النحو التالي:

using Recls;
using System;
static class Program { // formatted for vertical space
    static void Main() {
        foreach(IEntry e in FileSearcher.Search(@"c:\", "*.xml|*.csv|*.xls")) {
            Console.WriteLine(e.Path);
        }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top