واضح آرشیو وب فارسی:سایت ریسک: حذف کردن فایل در کل یک درایو در #c و به کمک api ویندوز Rainmater 07 دي 1389, 17:42سلام چه جوری میشه با توابه API برنامه ای نوشت که توی اون نام درایو و نام فایل رو از کاربر بگیره و در داخل اون درایو هر فایلی با اون نام داشتیم حذف کنه؟ مثلا اگه کاربر *.txt رو وارد کرد تمام فایل های با پسوند txt اون درایو (شامل ساب فولدر ها) رو پیدا کنه و پاک کنه؟ the_king 07 دي 1389, 21:50سلام چه جوری میشه با توابه API برنامه ای نوشت که توی اون نام درایو و نام فایل رو از کاربر بگیره و در داخل اون درایو هر فایلی با اون نام داشتیم حذف کنه؟ مثلا اگه کاربر *.txt رو وارد کرد تمام فایل های با پسوند txt اون درایو (شامل ساب فولدر ها) رو پیدا کنه و پاک کنه؟ با کدوم زبان برنامه نویسی؟ با #C یا زبان دیگه ای؟ زبان های تحت Net. با وجود Framework در اغلب موارد نیازی به ارتباط مستقیم با API سیستم عامل ندارند. API ویندوز برای حذف کردن مجموعه ای از فایل ها تابع SHFileOperation رو داره. Rainmater 08 دي 1389, 00:25بله منظورم با c sharp بود . و میخوام اون مثالی که گفتم رو با توابع api پیاده سازی کنم؟ با تشکر فراوااااااااان از شما the_king 08 دي 1389, 17:34کاری که خیلی ساده تر با Framework میشد انجام داد رو با API ویندوز پیاده سازی کردم. کلاس SearchFiles.cs برای جستجوی فایل ها در یک مسیر و زیر پوشه هاش بکار میره، یک تابع به اسم ()FindFilesRecursively رو ارائه می کنه که تمامی فایل هایی که با pattern مورد نظر شما مطابقت داره رو بصورت آرایه string بر می گردونه. داخل این کلاس از توابع API جستجوی فایل یعنی FindFirstFile و FindNextFile و FindClose استفاده شده. کل عملکرد این کلاس رو می توانستید خیلی ساده تر با تابع Directory.GetFiles موجود در Framework انجام دهید. کلاس DeleteFiles.cs برای حذف کردن لیستی از فایل ها بکار میره. در داخل این کلاس دو تابع به اسم های ()DeleteFilesProgress و ()DeleteFilesSilent ارائه میشه که می توانند یک آرایه string شامل مسیر فایل ها رو دریافت کرده و حذف کنند. فرقشان با هم در این است که دومی هیچگونه نمایشی ندارد اما اولی موقع حذف کردن فایل ها در یک پنجره جداگانه اسمشان و یک Progressbar را نمایش می دهد. ابتدا عملیات جستجو بایستی خاتمه یابد و سپس عملیات حذف کردن آغاز می گردد. این دو عملیات در یک نخ (Thread) جداگانه و توسط backgroundWorker1 انجام می شوند تا برنامه اصلی و فرم برنامه در هنگام انجام این عملیات سنگین قفل نکند، یعنی عملیات بصورت Multi-threading انجام می شود. کد کامل برنامه (Visual Studio 2008) به همراه فایل اجرایی exe ضمیمه این پست می باشد. Rainmater 08 دي 1389, 19:56ممنون از شما که پاسخگوی سوال ها هستید،واقعا ممنون میتونیم برای پاک کردن از تابع delete file موجود در kernel32.dll استفاده کنیم؟ یا حتی کل عملیات جستجو توسط توابع FindFirstFile و FindNextFile انجام بدیم(بدون استفاده از FindFilesRecursively )؟ the_king 08 دي 1389, 20:27ممنون از شما که پاسخگوی سوال ها هستید،واقعا ممنون میتونیم برای پاک کردن از تابع delete file موجود در kernel32.dll استفاده کنیم؟ یا حتی کل عملیات جستجو توسط توابع FindFirstFile و FindNextFile انجام بدیم(بدون استفاده از FindFilesRecursively )؟ می توانید از DeleteFile استفاده کنید اما DeleteFile فقط یک فایل رو در هر عملیات حذف می کنه. برای حذف کردن تعداد زیادی فایل کمی کنده و مناسب نیست. از اونجایی که قبل از عملیات جستجو تعداد فایل هایی که در انتها پیدا خواهند شد مشخص نیست از یک ProgressBar مشخص که با درصد پیشرفت عملیات رو نشون بده نمیشه استفاده کرد. در نتیجه استفاده از DeleteFile جز کند شدن عملیات کمک خاصی نمی کنه، مگر اینکه بخواهید برای حذف کردن تک تک فایل ها یک حلقه بسازید تا هر زمانی که خواستید عملیات حذف شدن رو متوقف کنید. یا حتی کل عملیات جستجو توسط توابع FindFirstFile و FindNextFile انجام بدیم(بدون استفاده از FindFilesRecursively )؟ من هم در داخل FindFilesRecursively از FindFirstFile و FindNextFile استفاده کردم اما این نکته رو در نظر بگیرید که FindFirstFile و FindNextFile به تنهایی فقط پوشه ها و فایل های فرزند یک مسیر رو پیدا می کنند و وارد زیر پوشه ها نمی شوند. به همین جهت اگر برای استفاده از آنها تابع جدیدی نسازید نمی توانید زیر پوشه ها رو به روش بازگشتی پیمایش و جستجو کنید. فرضا اگه مسیر C:New Folder رو پیمایش کنید دیگه مسیر C:New FolderMy Files نمیشه و فایل های داخل اون رو جستجو نمی کنه. ناچار هستید که تابعی مثل FindFilesRecursively رو بسازید تا به روش بازگشتی فراخوانی اش کنید. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 2733]