PDA

View Full Version : حذف تصاویر از داخل پوشه



safari_m4
پنج شنبه 18 خرداد 1402, 10:08 صبح
سلام و وقت بخیر و خسته نباشید دوستان من در پروژه ام تصاویر را داخل پوشه کنار پوشه دیباک برنامه ام ذخیره می کنم و فقط نام تصاویر را در دیتابیس ذخیره می کنم حالا موقع فرخوانی و پر کردن پیکجرباکس برنامه ام مشکلی نیست فقط مشکل جایی است که اقدام به حذف رکود مورد نظر خود از داخل دیتابیس می کنم و بعد از آن هم دستور حذف تصور مورد نظر را از داخل پوشه مورد نظر انجام می دهم در اینجا حذف انجام نمی شود و خطا می دهد که حذف تصویر با این نام ممکن نیست چون فایل مورد نظر در جایی دیکر در حال استفاده می باشد بیشتر مراحل را تست کردم ولی مشکل حل نشد لطفا اگر امکانش هست راهنمایی فرمایید با تشکر و سپاس

ShayanFiroozi
پنج شنبه 18 خرداد 1402, 11:29 صبح
سلام ،

قبل از حذف فایل باید reference هاشو از بین ببرین !


if (picVLC.Image != null)
{
picVLC.Image.Dispose();
picVLC.Image = null;
}


اگر پاسخ نگرفتین این کد رو تست کنین ( که البته به جز در موارد خاص پیشنهاد نمیکنم ) :


if (picVLC.Image != null)
{
picVLC.Image.Dispose();
picVLC.Image = null;


GC.Collect();
}


اگر بازهم نتیجه نگرفتین از طریق همین تاپیک پیگیری کنین ، البته با ارسال سورس کد مربوطه !

safari_m4
جمعه 19 خرداد 1402, 00:16 صبح
سلام ،

قبل از حذف فایل باید reference هاشو از بین ببرین !


if (picVLC.Image != null)
{
picVLC.Image.Dispose();
picVLC.Image = null;
}


اگر پاسخ نگرفتین این کد رو تست کنین ( که البته به جز در موارد خاص پیشنهاد نمیکنم ) :


if (picVLC.Image != null)
{
picVLC.Image.Dispose();
picVLC.Image = null;


GC.Collect();
}


اگر بازهم نتیجه نگرفتین از طریق همین پست پیگری کنین ، البته با ارسال سورس کد مربوطه !

تشکر و سپاس بیکران با همان جواب اولی مشکل حل شد

ببخشید یک سوال جهت ویرایش عکس در صورت ویرایش رکورد مورد نظر همراه با تغییر عکس آیا امکان مستقیم ویرایش عکس روی همان عکس قبلی وجود دارد یا باید اول عکس قبلی را حذف کنیم بعد عکس جدید را جایگزین کرد

پرستو پارسایی
جمعه 19 خرداد 1402, 00:22 صبح
ظبق پیشنهاد صحیح جناب Firoozi باید منابع را آزاد کنید . برای مثال :

private void btnDelete_Click(object sender, EventArgs e)
{
// بررسی وجود تصویر در پیکچر باکس
if (pictureBox1.Image != null)
{
// حذف تصویر از پوشه مربوطه
string imagePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory , "Images", "MyImage.jpg");
if (File.Exists(imagePath))
{
// رهایی منابع مصرفی تصویر
pictureBox1.Image.Dispose();


// حذف فایل تصویر
File.Delete(imagePath);
}


// تنظیم مقدار null برای پیکچر باکس
pictureBox1.Image = null;
}
}



در این کد، در رویداد کلیک بر روی دکمه Delete، ابتدا بررسی می‌شود که آیا تصویر در پیکچر باکس وجود دارد یا خیر. سپس، با استفاده از Path.Combine()، مسیر فایل تصویر را با توجه به مسیر پوشه "Images" دریافت می‌کنیم. در صورت وجود فایل تصویر، ابتدا منابع مصرفی تصویر با استفاده از تابع Dispose() رها می‌شوند و سپس فایل تصویر حذف می‌شود. در نهایت، مقدار null به پیکچر باکس تنظیم می‌شود تا تصویر حذف شده را نشان ندهد.

ShayanFiroozi
جمعه 19 خرداد 1402, 01:47 صبح
تشکر و سپاس بیکران با همان جواب اولی مشکل حل شد

ببخشید یک سوال جهت ویرایش عکس در صورت ویرایش رکورد مورد نظر همراه با تغییر عکس آیا امکان مستقیم ویرایش عکس روی همان عکس قبلی وجود دارد یا باید اول عکس قبلی را حذف کنیم بعد عکس جدید را جایگزین کرد

سلام مجدد ، به هر حال خیلی تفاوتی نداره ! چه شما overwrite کنین ، چه حذف و سپس دوباره بسازید ، اما برای هر 2 باید مطمئن باشین حتما منابع رو آزاد کرده باشین ، اگر نه مجددا خطا دریافت میکنین.

ضمنا دقت کنین که هم Image و هم PictureBox ها بخاطر استفاده از GDI مستعد نشت حافظه یا Memory Leak هستند ، اگر متوجه شدین نرم افزارتون به درستی کار نمیکنه ولی خطا هم نمیده ، این میتونه یکی از نشونه هاش باشه ، حتما به درستی منابع رو آزاد کنین و پیشنهاد میکنم از using استفاده کنین ، که حتی اگر در کد شما خطایی رخ داد این تضمین وجود داشته باشه که متد Dispose اون اشیاء فراخوانی و منابع آزاد میشن.

safari_m4
جمعه 19 خرداد 1402, 09:28 صبح
سلام مجدد ، به هر حال خیلی تفاوتی نداره ! چه شما overwrite کنین ، چه حذف و سپس دوباره بسازید ، اما برای هر 2 باید مطمئن باشین حتما منابع رو آزاد کرده باشین ، اگر نه مجددا خطا دریافت میکنین.

ضمنا دقت کنین که هم Image و هم PictureBox ها بخاطر استفاده از GDI مستعد نشت حافظه یا Memory Leak هستند ، اگر متوجه شدین نرم افزارتون به درستی کار نمیکنه ولی خطا هم نمیده ، این میتونه یکی از نشونه هاش باشه ، حتما به درستی منابع رو آزاد کنین و پیشنهاد میکنم از using استفاده کنین ، که حتی اگر در کد شما خطایی رخ داد این تضمین وجود داشته باشه که متد Dispose اون اشیاء فراخوانی و منابع آزاد میشن.

با تشکر و سپاس مجدد از بذل توجه اتان ممنون و عالی بود