2023年7月6日发(作者:)
对⽂件及⽂件夹操作总结项⽬中有新的需求,⽤Tree来显⽰远程服务器相应磁盘的所有⽬录。并对选定的⽂件或者⽂件夹进⾏操作。对于如何连接远程服务器并读取⽬录信息并⽤Tree显⽰不是这次总结的重点。对⽂件或者⽂件夹的操作包括新建,复制,剪切,删除(这⾥包括永久删除和删除到回收站)。等等,不是已经有File类和Directory类⾥⾯的好多静态⽅法可以实现上⾯的功能吗?对,上⾯提到的静态⽅法的确已经很⼤程度的满⾜了我们的需求,但是。。。1. 删除操作没有提供显⽰的确认(当然您可以⾃⼰确认),⽽且该删除操作是永久 删除。
2. 剪切(也就是对于的Move⽅法)只能是同⼀磁盘下⾯的操作,不能跨盘Move(对于⽂件夹⽽⾔)
3. 对于复制剪切或者删除多个⽂件不能显⽰进度条(像系统⼀样的进度条)基于上⾯的原因我选择了使⽤⾥⾯的API--- ,它包含4个操作:FO_COPY,FO_DELETE,FO_MOVE,FO_RENAME,您可以看来了解。对于基本的操作不⽤多说,这⾥只是说⽤到的与C#的IO类库不⽤的⽤法。1. 删除⽂件的时候确认操作:SHFILEOPSTRUCT⾥⾯的成员fFlags默认情况下会有确认操作的提⽰框,如果您不想要提⽰框,可以 = FOF_NOCONFIRMATION;2. 删除到回收站和永久删除: = FOF_ALLOWUNDO,顾名思义,允许撤销的话将删除到回收站,否则将永久删除。3. 操作⽂件或者⽂件夹的时候显⽰进度条: = FOF_SIMPLEPROGRESS4. 对于要删除的⽂件或者⽂件夹使⽤“00”结束,即"D:New Text 00"5. 如果要操作多个⽂件或者⽂件夹 ,不同的路径⽤“0”间隔,即"D:New Text 0D:New Folder00" 对于fFlags还有很多,您可以看了解。⽰例代码如下: ⽰例 1 public static class FileEx 2 { 3 [StructLayout(tial, CharSet = , Pack = 1 )] 4
5 public struct SHFILEOPSTRUCT 6 { 7
8 public IntPtr hwnd; 9
10 [MarshalAs(UnmanagedType.U4)] 11 public int wFunc; 12
13 public string pFrom; 14
15 public string pTo; 16
17 public short fFlags; 18
19 [MarshalAs()] 20 public bool fAnyOperationsAborted; 21
22 public IntPtr hNameMappings; 23
24 public string lpszProgressTitle; 25
26 } 27
28 [DllImport( " " , CharSet = )] 29
30 static extern int SHFileOperation( ref SHFILEOPSTRUCT FileOp); 31
32 const int FO_RENAME = 4 ; 33
34 const int FO_DELETE = 3 ; 35
36 const int FO_COPY = 2 ; 37
38 const int FO_MOVE = 1 ; 39
40 const int FOF_ALLOWUNDO = 0x40 ; 41
42 const int FOF_NOCONFIRMATION = 0x10 ; // Don't prompt the user.;
43
44 const int FOF_SIMPLEPROGRESS = 0x100 ; 45
46 public static void SendToRecyclyBin( string path) 47 { 48
49 SHFILEOPSTRUCT shf = new SHFILEOPSTRUCT(); 50
51 = FO_DELETE; 52
53 = FOF_ALLOWUNDO; // | FOF_NOCONFIRMATION;
54
55 = path; 56
57 // 返回0表⽰操作成功
58 SHFileOperation( ref shf); 59
60 } 61
62 public static bool Copy( string from, string to) 63 { 64 SHFILEOPSTRUCT shf = new SHFILEOPSTRUCT(); 65
66 = FO_COPY; 67
68 = FOF_ALLOWUNDO; 69
70 = from; 71
72 = to; 73
74 return SHFileOperation( ref shf) == 0 ; 75
76 } 77
78 public static bool Move( string from, string to) 79 { 80
81 SHFILEOPSTRUCT shf = new SHFILEOPSTRUCT(); 82
83 = FO_MOVE; 84
85 = FOF_ALLOWUNDO; 86
87 = from; 88
89 = to; 90
91 return SHFileOperation( ref shf) == 0 ; 92
93 } 94
95 public static bool RENAME( string from, string to) 96 { 97
98 SHFILEOPSTRUCT shf = new SHFILEOPSTRUCT(); 99
100 = FO_RENAME;101
102 = FOF_ALLOWUNDO;103
104 = from;105
106 = to;107
108 return SHFileOperation( ref shf) == 0 ;109
110 }111 }
只是总结⽽已。。。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1688598631a153681.html
评论列表(0条)