سؤال

حاليًا أستخدم الوظيفة التالية

file.Delete();

ولكن كيف يمكنني استخدام هذه الوظيفة لإرسال ملف إلى سلة المحذوفات بدلاً من حذفه تمامًا؟

هل كانت مفيدة؟

المحلول

ملاحظة: هذا أيضا لا يعمل مع التطبيقات التفاعلية غير واجهة المستخدم مثل خدمات Windows

هذا المجمع يمكن أن يوفر لك الوظائف اللازمة:

giveacodicetagpre.

نصائح أخرى

استخدم filesystem.deletefile وحدد الحق recycleoption .

في حين أن هذا سيعمل مع تطبيقات UI التفاعلية، فلن يعمل مع تطبيقات تفاعلية غير واجهة المستخدم مثل تطبيق خدمة Windows.

من MSDN:

إضافة مرجع إلى تجميع Microsoft.VisualBasic.الفئة المطلوبة موجودة في هذه المكتبة.

أضف عبارة الاستخدام هذه إلى أعلى الملف using Microsoft.VisualBasic.FileIO;

يستخدم FileSystem.DeleteFile لحذف ملف، لديه خيار تحديد سلة المحذوفات أم لا.

يستخدم FileSystem.DeleteDirectory لحذف دليل مع خيار تحديد إرساله إلى سلة المحذوفات أم لا.

الحل التالي أبسط من الحلول الأخرى:

using Shell32;

static class Program
{
    public static Shell shell = new Shell();
    public static Folder RecyclingBin = shell.NameSpace(10);

    static void Main()
    {
        RecyclingBin.MoveHere("PATH TO FILE/FOLDER")
    }
}

يمكنك استخدام وظائف أخرى لسلة المحذوفات باستخدام هذه المكتبة.

أولاً، لا تنس إضافة مكتبة "Microsoft Shell Controls And Automation" (من قائمة COM)، لتتمكن من استخدام Shell32 مساحة الاسم.سيتم ربطه ديناميكيًا بمشروعك، بدلاً من تجميعه مع برنامجك.

[1]: https://i.stack.imgur.com/erV

لسوء الحظ، تحتاج إلى اللجوء إلى Win32 API لإزالة ملف إلى سلة المحذوفات.جرب الكود التالي، بناءً على هذا المشنور.فإنه يستخدم عام SHFileOperation وظيفة لعمليات نظام الملفات عبر Windows Shell.

حدد ما يلي (ربما يكون الأفضل في فئة الأدوات المساعدة).

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto, Pack=1)]
public struct SHFILEOPSTRUCT
{
        public IntPtr hwnd;
        [MarshalAs(UnmanagedType.U4)] public int wFunc;
        public string pFrom;
        public string pTo;
        public short fFlags;
        [MarshalAs(UnmanagedType.Bool)] public bool fAnyOperationsAborted;
        public IntPtr hNameMappings;
        public string lpszProgressTitle;
}

[DllImport("shell32.dll", CharSet=CharSet.Auto)]
public static extern int SHFileOperation(ref SHFILEOPSTRUCT FileOp);

public const int FO_DELETE = 3;
public const int FOF_ALLOWUNDO = 0x40;
public const int FOF_NOCONFIRMATION = 0x10; // Don't prompt the user

ولاستخدامه لحذف ملف، وإرساله إلى سلة المحذوفات، فأنت تريد شيئًا مثل:

var shf = new SHFILEOPSTRUCT();
shf.wFunc = FO_DELETE;
shf.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION;
shf.pFrom = @"C:\test.txt";
SHFileOperation(ref shf);

يمكنك استيراد ملف Dll SHFileOperation لفعل هذا.

هنالك مكتبة مدمجة لهذا .

قم أولاً بإضافة مرجع Microsoft.VisualBasicثم أضف هذا الكود :

FileSystem.DeleteFile(path_of_the_file,
                        Microsoft.VisualBasic.FileIO.UIOption.AllDialogs,
                        Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin,
                        Microsoft.VisualBasic.FileIO.UICancelOption.ThrowException);

لقد وجدت هذا هنا .

يمكنني استخدام طريقة التمديد هذه، ثم يمكنني فقط استخدام دليل الدليل أو fileinfo وحذف ذلك.

giveacodicetagpre.

نموذج كيفية الاتصال به يمكن أن يكون هذا:

giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top