| 

.NET C# Java Javascript Exception

0
Wie gehe ich vor, um Dateien mit Hilfe des Windows-Papierkorbes zu löschen, damit ich bei Bedarf den Löschvorgang rückgängig machen kann?
26.01.2011
BOK 3 1 3
2 Antworten
2
Es gibt in C# keine vorgefertigte Option, das zu machen - aber in VB. Allerdings lässt sich die VB-Variante auch in C# nutzen:

  • Microsoft.VisualBasic.dll referenzieren
  • Den Namensraum Microsoft.VisualBasic.FileIO per using einbinden
  • Nun erhält man Zugriff auf die Klasse FileSystem, die zwei Methoden anbietet: DeleteFile und DeleteDirectory, die jeweils eine Option namens RecycleOption haben, mit der man angeben kann, ob in den Papierkorb oder direkt gelöscht werden soll
26.01.2011
Golo Roden 2,7k 3 9
2
Die API-Funktion heißt "SHFileOperation" aus der "shell32.dll".

Hier ein Beispiel:

using System;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace FileHandlerNS {
public class FileHandler {

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
public struct SHFILEOPSTRUCT {
public IntPtr hwnd;
public UInt32 wFunc;
public string pFrom;
public string pTo;
public UInt16 fFlags;
public Int32 fAnyOperationsAborted;
public IntPtr hNameMappings;
[MarshalAs(UnmanagedType.LPWStr)]
public String lpszProgressTitle;
}

[DllImport("shell32.dll" , CharSet = CharSet.Unicode)]
public static extern Int32 SHFileOperation(ref SHFILEOPSTRUCT lpFileOp);

const int FO_DELETE = 3;
const int FOF_ALLOWUNDO = 0x40;
const int FOF_NOCONFIRMATION = 0x10;

public static void DeleteFile(string fname) {
SHFILEOPSTRUCT shf = new SHFILEOPSTRUCT();
shf.hwnd = IntPtr.Zero;
shf.wFunc = (uint) FO_DELETE;
shf.fFlags = (ushort) FOF_ALLOWUNDO | FOF_NOCONFIRMATION;
shf.pTo = fname;
shf.fAnyOperationsAborted = 0;
shf.hNameMappings = IntPtr.Zero;
SHFileOperation(ref shf);
}
}
}
26.01.2011
Floyd 14,6k 3 9
Floyd 14,6k 3 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH