PDA

View Full Version : پاک کردن چند عکس همزمان از داخل پوشه



neda555
دوشنبه 21 فروردین 1391, 10:56 صبح
سلام دوستان
از کد زیر که برای پاک کردن عکس از داخل یک پوشه هست چه طور میشه برای پاک کردن چند عکس با هم از داخل پوشه استفاده کرد؟ میشه داخل متغیر s چند تا اسم عکس باشه
File.Delete(Server.MapPath(("~/img/") + s.ToString()));

clover
دوشنبه 21 فروردین 1391, 11:24 صبح
سلام


میشه داخل متغیر s چند تا اسم عکس باشه
بله می تونه باشه، در این صورت s یک آرایه یا یک لیست هست و با یک حلقه ی foreach می تونید متد Delete رو برای تک تک اون عکس ها اجرا کنید

fakhravari
دوشنبه 21 فروردین 1391, 13:12 عصر
یه نمونه کد برای جدا سازی
http://barnamenevis.org/showthread.php?329911-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D9%BE%DB%8C%D8%A7%D9%85-%D8%A8%DB%8C%D9%86-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%A7%D9%86&highlight=%D8%A7%D8%B1%D8%B3%D8%A7%D9%84+%D9%BE%DB %8C%D8%A7%D9%85+%D8%A8%DB%8C%D9%86+%DA%A9%D8%A7%D8 %B1%D8%A8%D8%B1%D8%A7%D9%86

neda555
دوشنبه 21 فروردین 1391, 13:35 عصر
ببینید من یه دیتالیست گذاشتم داخلش یه چک باکس هست و دوتا لیبل
یکی از لیبل ها به id عکس و دیگری به نام عکس بایند شده حالا قراره کاربر چند تا عکس را با هم بتونه انتخاب کنه و حذف کنه واسه حذفش از دیتا بیس که مشکلی نیست الان این کد را چه طور تغییر بدم تا از پوشه هم حذف بشه
کدی که نوشتم(lbid داخلش id ها و lbim داخلش نام عکس هاست) :
protected void Button3_Click(object sender, EventArgs e)
{
string sd = "";
for (int i = 0; i < DataList1.Items.Count; i++)
{
CheckBox cur = (CheckBox)DataList1.Items[i].FindControl("Ch1");
Label lbid = (Label)DataList1.Items[i].FindControl("Lb1");
Label lbim = (Label)DataList1.Items[i].FindControl("Lb2");

if (cur.Checked)
if (sd == "")
sd = lbid.Text;
else
{
sd = sd + "," + lbid.Text;
}

}

SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrin gs["DBConnectionString1"].ToString());
cn.Open();
SqlCommand cm = new SqlCommand("delete from tb1 where id in(" + sd + ")", cn);
cm.ExecuteNonQuery();
cn.Close();

clover
دوشنبه 21 فروردین 1391, 14:09 عصر
الان این کد را چه طور تغییر بدم تا از پوشه هم حذف بشه

یک راه ساده این هست، در همون زمانی که دارید به پارامتر اضافه می کنید حذف رو هم انجام بدید:

if (sd == "")
sd = lbid.Text;
else
{
sd = sd + "," + lbid.Text;
File.Delete(Server.MapPath(("~/img/") + lbim.Text));
}

neda555
دوشنبه 21 فروردین 1391, 14:35 عصر
اینا همون اول امتحان کردم ولی عکسا حذف نمیشه

nafasak
دوشنبه 21 فروردین 1391, 14:42 عصر
از write استفاده کن ببین آدرس فایل درسته؟

responce.write(Server.MapPath(("~/img/") + lbim.Text)

nafasak
دوشنبه 21 فروردین 1391, 14:46 عصر
چند تا عکس رو چک میکنی برای حذف؟
کدی که دوستمون نوشتن اولین فایل رو جا میندازه .
باید به اینصورت باشه:

if (cur.Checked){
if (sd == "")
sd = lbid.Text;
else
{
sd = sd + "," + lbid.Text;
}
File.Delete(Server.MapPath(("~/img/") + lbim.Text));
}

neda555
دوشنبه 21 فروردین 1391, 15:12 عصر
با اینکه Response.Write(Server.MapPath(("~/img/") + im.ToString())); را آخرین دستور گذاشتم چیزی نشونم نمیده
راه دیگه چیه اگر بخوام جدا بنویسم و حلقه واسش بزارم

neda555
دوشنبه 21 فروردین 1391, 22:10 عصر
دوستان برنامه نویس نظری ندارید؟؟؟؟چه جوری یه آرایه واسش تعریف کنم با توجه به کدی که دارم؟

d_derakhshani
شنبه 26 فروردین 1391, 12:30 عصر
اول بگید نسخه تون رو رو سرور پابلیش کردید یا لوکاله؟کلا رو IIS هست یا نه؟

neda555
شنبه 26 فروردین 1391, 12:37 عصر
به صورت local کار میکنم

d_derakhshani
شنبه 26 فروردین 1391, 13:05 عصر
پس یعنی رو visual studio?
خطایی هم میده؟از try-catch در قسمت Delete هم استفاده کنید. بررسی کردید که مسیر درست باشه؟روی خط Delete یک break point بزارید. حالات ممکن:
یا به خط مذکور می رسه یا نمی رسه
اگه می رسه یا باید خطا بده یا حذف کنه(try-catch در این قسمت یادتون نره)
دقیقا ذکر کنید کدوم یکی از اتفاقات بالا میافته

neda555
شنبه 26 فروردین 1391, 14:19 عصر
اجرا میشه هیچ خطایی نمیده ولی حذف هم نمیشه!

d_derakhshani
شنبه 26 فروردین 1391, 14:29 عصر
چقدر عجیب.اگه میخاید برنامه تون رو کلا بزارید (Attach) یه تستش کنیم.

ghbn1362
شنبه 26 فروردین 1391, 16:10 عصر
کد ها درسته هستن اگر خطا ندارید احتمال دارد آدرس عکس ها مشکل داشته باشد یا این که در حال Use باشند فایل در حال Use هم حذف نمی شود برنامه را Trace کرده اید تا از صحت آدرس و درستی آن اطمینان پیدا کنید؟

neda555
شنبه 26 فروردین 1391, 23:04 عصر
http://wdl.persiangig.com/pages/download/?dl=http://neda2450.persiangig.com/document/delax.rar

به دلایلی با vs2008 کار میکنم فریمورکش یادتون نره

ghbn1362
شنبه 26 فروردین 1391, 23:31 عصر
این کد را

if (File.Exists(Server.MapPath(("~/img/") + lbim.ToString())))
File.Delete(Server.MapPath(("~/img/") + lbim.ToString()));

به

if (File.Exists(Server.MapPath(("~/img/") + lbim.Text.ToString())))
File.Delete(Server.MapPath(("~/img/") + lbim.Text.ToString()));

تغییر دهید درست می شود

neda555
شنبه 26 فروردین 1391, 23:48 عصر
ممنون ولی با انجام این کار تمام عکسهای داخل پوشه پاک میشه

ghbn1362
شنبه 26 فروردین 1391, 23:57 عصر
به خاطر این که شما چک کردین فایل وجود داسته باشه ولی چک نکردین چک باکس حذف تیک خورده یا نه دستور این میشه

if (cur.Checked)
{
if (sd == "")
sd = lbid.Text;
else
{
sd = sd + "," + lbid.Text;

}
if (File.Exists(Server.MapPath(("~/img/") + lbim.ToString())))
File.Delete(Server.MapPath(("~/img/") + lbim.ToString()));
Label1.Text = lbim.ToString();
}


در حقیقت یک }{ برای شرطی که چک خوردن CheckBox رو تست می کنه کم گذاشتین

neda555
یک شنبه 27 فروردین 1391, 00:10 صبح
بله الان درست شد خیلی ممنون:لبخندساده: