PDA

مشاهده نسخه کامل : برنامه ای جالب برای اضافه/ حذف کردن کلماتی مشخص از چندین هزار فایل + Source Code



™Ali
21-08-09, 11:44
سلام دوستان

امروز داشتم نگاهی به پوشه Picture خودم می کردم که متوجه شدم در حدود 10 هزار عکس به این صورت نام گذاری شدند :


Wallpaper_1_MRT.jpg
Wallpaper_2_MRT.jpg
Wallpaper_3_MRT.jpg
Wallpaper_4_MRT.jpg

اون کلمه MRT منو خیلی اذیت می کرد چون زیاد خوشم ازش نمیاد :1. (38):

Rename کردن 10 هزار عکس کار بسیار سختی هست و چندین سال طول میکشه ولی حرفه برنامه نویسی باید به دردی بخوره!

برنامه ای که نوشتم به این صورت هست :


Only the registered members can see the link



مرور : در قسمت مرور فولدر رو مشخص کنید. برنامه به صورت خودکار تا 5 زیر لایه از اون فولدر رو واسه پیدا کردن فایل جست و جو می کنه!

ابتدای حرف از پایان نام فایل ، با پسوند : این مورد فقط واسه حذف کردن کاربرد داره. به این صورت که مثلا واسه:



Wallpaper_1_MRT.jpg


شما باید از آخر اسم فایل همراه با پسوند بشمردید تا به کلمه M برسید! پس مقدار 7 رو باید وارد کنید! (نقطه پسوند یادتون نره!)

این کلمه را حذف کن / اضافه کن : کلمه ای که میخواید حذف کنید یا اضافه کنید رو به برنامه بدید. در ضمن بزرگ یا کوچک بودن حروف برای حذف کردن وجود نداره!

من اینطوری نسل کلمه MRT رو از آخر فایل ها برداشتم. هم چنین شما می تونید با این روش اسم/ تگ تبلیغاتی خودتون رو به آخر هزاران فایل اضافه کنید :1. (21):

دانلود Source سی شارپ از ضمیمه (Only the registered members can see the link)
فایل exe برنامه موجود در پوشه File Renamer\bin\Debug

با سپاس :1. (21):

MoBiN.R
21-08-09, 12:20
برنامه پرکاربردیه

™Ali
21-08-09, 12:22
ممنون مبین جان

دوستان اگر امکاناتی دیگه میخوان بگن اگر تونستم به برنامه اضافه می کنم.

خودم الان با همین به آخر 3500 فایل کلمه Ali_ رو اضافه کردم فقط در 2 ثانیه ! :1. (21):

ravegoat
23-08-09, 10:05
سلام دوستان
...
مرور : در قسمت مرور فولدر رو مشخص کنید. برنامه به صورت خودکار تا 5 زیر لایه از اون فولدر رو واسه پیدا کردن فایل جست و جو می کنه!

سلام علی جان!
از برنامه ای که گذاشتی ممنونم. :give_rose:

فقط یه پیشنهاد داشتم:
اگه اشتباه نکنم (سی شارپ کار نمی کنم که:1. (38):) سورس برنامه با یه لوپ زیر شاخه ی اول رو چک می کنه. بعد با یه لوپ دیگه زیر شاخه ی دوم رو ... و همین جوری تا 5 مرحله میره. خب این جوری بقیه زیر شاخه ها بررسی نمی شن. به علاوه سورس برنامه خیلی گنگ میشه:1. (27):.

به نظر من از این سورس برای متد Check استفاده کن:



public void Check(string currDir)
{
string Dir = null;
string File = null;
FileInfo FI = default(FileInfo);
foreach (var File in Directory.GetFiles(currDir)) {
FI = new FileInfo(File);
lstFiles.Items.Add(FI.Name);
}
foreach (var Dir in Directory.GetDirectories(currDir)) {
countFolders += 1;
Application.DoEvents();
Check(Dir);
}
}

این سورس در اصل VB.Net بود. بعد به سی شارپ تبدیلش کردم. شاید یکم مشکل داشته باشه.
تازه می تونی لوپ های اضافی توی برنامه رو حذف کنی و فقط از یه تابع استفاده کنی.:great:



خودم الان با همین به آخر 3500 فایل کلمه Ali_ رو اضافه کردم فقط در 2 ثانیه ! :1. (21):

خدا حفظ کنه اون سیستمو. رو سیستم من ممکنه موقع مرور 3500 تا فایل برنامه هنگ کنه...:1. (2): . در کدی که قرار دادم می تونی با ایجاد وقفه هایی مشکل قفل شدن برنامه رو کم کنی.:1. (26):

البته خودت که استادی :1. (10): ولی اگه جایی مشکل داشتی بگو برات توضیح بدم.

موفق باشی
آرمین:11():

™Ali
23-08-09, 10:50
ممنون آرمین عزیز

والا خودم گیر کرده بودم که چجوری میشه یک Root Folder رو تا آخر بررسی کرد و مجبور شدم از اون کد استفاده کنم.

کد برنامه رو خیلی زیاد کرده بود ولی تو region گذاشتمش بلکه از دستش خلاص بشم !

واسه گیر نکردن از کد Application.DoEvents استفاده می کنم به زودی...

فقط تو کدی که گذاشتی این مورد یک تابع رو فراخوانی می کنه:

Scanfolder(Dir);


چیزی تو کدی اصلی دربارش نفهمیدم. این مورد رو بگی کد رو تصحیح می کنم !!

موفق باشی ..Only the registered members can see the link

™Ali
23-08-09, 11:59
دوستان بعضی از 20 دقیقه فکر راه حلی بسیار کوتاه پیدا کردم Only the registered members can see the link

اول یه تابع در سطح فرم تعریف می کنیم به این شکل :



private void ScanDir(string Dir)
{
foreach (string Folder in Directory.GetDirectories(Dir))
{
foreach (string File in Directory.GetFiles(Folder))
lstFiles.Items.Add(Path.GetFileName(File));

ScanDir(Folder);
}
}


حالا این طور بهش مقدار میدیم و فایل های موجود در Root رو هم اول کار بررسی می کنیم :




foreach (string FileName1 in Directory.GetFiles(txtAdrrees.Text))
lstFiles.Items.Add(Path.GetFileName(FileName1));
ScanDir(txtAdrrees.Text);






واسه گرفتن خطاها هم از یه Try و Catch استفاده می کنیم!

:





چطوره؟! Only the registered members can see the link

ravegoat
23-08-09, 12:48
این سورسی که خودت گذاشتی با سورسی که من گذاشتم هم ارز هستش.

ابتدا زیر شاخه های مسیر انتخاب شده بررسی میشه.
بعد هر کدوم از زیر شاخه به عنوان شاخه ی اصلی در نظر گرفته میشه و مرحله ی اول براش اجرا میشه.
این روند ادامه پیدا می کنه تا جایی که تمام شاخه های فرعی بررسی بشن.

در حقیقت متغیر Dir (یا Folder تو) زیر شاخه ای هستش که تبدیل به شاخه ی اصلی میشه و متد در رابطه با اون عمل می کنه.

شاد باشی
آرمین

™Ali
23-08-09, 13:49
ممنون از این که سورسی که گذاشته بودی رو تصحیح کردی !

ولی جون خودم این روشه که گفتم همین طوری زد به سرم ! :1. (38):