سلام.
ببینید. شما وقتی باید برید سراغ Win32 API ها که BCL ساز و کاری براش نداشته باشه یا کاری که میخواهید انجام بدید Performance Critical باشه (که در اینصورت این سوال پیش میاد که چرا اصلا کد Managed باید بنویسیم؟).
اما در سوال شما یه نکته ای نهفته هستش، اونم Enumerate کردن فایلهای داخل یک Folder. تا قبل از .NET 4.0 شما باید از System.IO.Directory.GetFiles استفاده میکردید. این متود، به شما آرایه ای از string برمیگردوند و به گونه ای پیاده سازی شده بود که اگر شما نیاز به گرفتن چند فایل از خروارها فایل در اون Directory رو داشتید، باز هم مجبور بودید صبر کنید تا کلیه فایلها توسط این متود Enumerate بشه.
خوشبختانه در .NET 4.0 با معرفی متود EnumerateFiles این مشکل رفع شده. اما اگر شما از .NET 4.0 استفاده نمیکنید، میتونید به مقاله ای که Tom Shelton نوشته مراجعه کنید و همینکارو در .NET های نسخه قبلی بکمک Win32 API ها انجام بدید (البته اگر شرایط اجرایی شما چنین چیزی رو طلب میکنه، و الا اگر نیاز دارید کلیه فایلهای درون Folder رو بگیرید، استفاده از همون GetFiles کفایت میکنه).
جمع بندی: اگر نقصانی در BCL هستش یا چیزی در BCL بد پیاده سازی شده، اونوقت سراغ Win32 API ها رفتن معنا پیدا میکنه. در غیر اینصورت، اولویت اول استفاده از BCL باید باشه.
موفق باشید.