Zitat: |
Das falsche Attribut hast du aber schon entfernt? Lass einmal alle bei diesem Feld weg, das sollte auch so funktionieren. |
Peinlich, habe die Attribute falschrum angehängt (unter statt über). Nach Korrektur ließ es sich dann kompilieren. Ebenso wenn man sie, wie von dir vorgeschlagen, wegläßt. Allerdings führt das Programm nun nicht aus was es soll (siehe unten)....
Zitat: |
Das sieht auch logisch aus, denn die Funktion bekommt als Quelle und Ziel ggf. mehrere durch ein Nullzeichen getrennte Zeichenketten. Das funktioniert vermutlich mit einem normalen C#-String nicht so gut....Zudem wird hier Int32 als BOOL benutzt |
Verstehe leider nicht genau was du meinst. Könntest du mir vielleicht noch einen Hinweis geben. Durch Studium der Seite ist mir aber aufgefallen, daß es wohl
C#-Quelltext
1: 2:
| file0p.pFrom = @"C:\fileop_test\test1.csv\0\0"; file0p.pTo = @"C:\fileop_test\test2.csv\0\0"; |
heißen muß. (Bisher hatte ich nur eine Null nach csv)
Allerdings scheint bei Ausführung des Codes nicht zu passieren. Insbesondere die angestrebte Fileoperation wird nicht ausgeführt...
Der Code sieht jetzt so aus:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| using System; using System.Runtime.InteropServices;
namespace APIFILEOPERATION { class class1 {
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct SHFILEOPSTRUCT { public IntPtr hwnd; public uint wFunc; public string pFrom; public string pTo; public UInt16 fFlags; public bool fAnyOperationsAborted; public IntPtr hNameMappings; public string lpszProgressTitle; }
[DllImport("shell32.dll", CharSet = CharSet.Auto)] static extern int SHFileOperation(ref SHFILEOPSTRUCT file0p);
public static void Main() { SHFILEOPSTRUCT file0p = new SHFILEOPSTRUCT(); file0p.wFunc = 0x0002; file0p.pFrom = @"C:\fileop_test\test1.csv\0\0"; file0p.pTo = @"C:\fileop_test\test2.csv\0\0"; file0p.fFlags = 0x100;
int result = SHFileOperation(ref file0p); }
}
} |
Was könnte jetzt noch falsch sein ?
Vielen Dank für die bisherige und weitere Hilfe