// FileOperationDemo.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include int main() { BOOL ret; LPCWSTR filePath1 = _T("C:\Users\Administrator\Desktop\file_demo_test1.txt"); LPCWSTR filePath2 = _T("C:\Users\Administrator\Desktop\file_demo_test2.txt"); LPCWSTR dirPath1 = _T("C:\Users\Administrator\Desktop\dir_demo_test1"); LPCWSTR dirPath2 = _T("C:\Users\Administrator\Desktop\dir_demo_test2"); /* 創建文件 HANDLE CreateFile( LPCTSTR lpFileName, //指向文件名的指針 DWORD dwDesiredAccess, //訪問模式(寫/讀), 如果為 GENERIC_READ 表示允許對設備進行讀訪問;如果為 GENERIC_WRITE 表示允許對設備進行寫訪問(可組合使用);如果為零,表示只允許獲取與一個設備有關的信息 DWORD dwShareMode, //共享模式, 0表示不共享; FILE_SHARE_READ 和/或 FILE_SHARE_WRITE 表示允許對文件進行共享訪問 LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向一個SECURITY_ATTRIBUTES安全屬性結構的指針,定義了文件的安全特性(如果操作系統支持的話),默認為0 DWORD dwCreationDisposition, //如何創建 DWORD dwFlagsAndAttributes, //文件屬性 HANDLE hTemplateFile //用于復制文件句柄, 如果不為零,則指定一個文件句柄。新文件將從這個文件中復制擴展屬性 ); dwDesiredAccess Long,下述常數之一: #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ |\ FILE_READ_DATA |\ FILE_READ_ATTRIBUTES |\ FILE_READ_EA |\ SYNCHRONIZE) #define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ FILE_WRITE_DATA |\ FILE_WRITE_ATTRIBUTES |\ FILE_WRITE_EA |\ FILE_APPEND_DATA |\ SYNCHRONIZE) #define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ FILE_READ_ATTRIBUTES |\ FILE_EXECUTE |\ SYNCHRONIZE) dwCreationDisposition Long,下述常數之一: CREATE_NEW 創建文件;如文件存在則會出錯 CREATE_ALWAYS 創建文件,會改寫前一個文件 OPEN_EXISTING 文件必須已經存在。由設備提出要求 OPEN_ALWAYS 如文件不存在則創建它 TRUNCATE_EXISTING 將現有文件縮短為零長度 dwShareMode Long,下述常數之一: #define FILE_SHARE_READ 0x00000001 #define FILE_SHARE_WRITE 0x00000002 #define FILE_SHARE_DELETE 0x00000004 dwFlagsAndAttributes Long, 一個或多個下述常數 FILE_ATTRIBUTE_ARCHIVE 標記歸檔屬性 FILE_ATTRIBUTE_COMPRESSED 將文件標記為已壓縮,或者標記為文件在目錄中的默認壓縮方式 FILE_ATTRIBUTE_NORMAL 默認屬性 FILE_ATTRIBUTE_HIDDEN 隱藏文件或目錄 FILE_ATTRIBUTE_READONLY 文件為只讀 FILE_ATTRIBUTE_SYSTEM 文件為系統文件 FILE_FLAG_WRITE_THROUGH 操作系統不得推遲對文件的寫操作 FILE_FLAG_OVERLAPPED 允許對文件進行重疊操作 FILE_FLAG_NO_BUFFERING 禁止對文件進行緩沖處理。文件只能寫入磁盤卷的扇區塊 FILE_FLAG_RANDOM_ACCESS 針對隨機訪問對文件緩沖進行優化 FILE_FLAG_SEQUENTIAL_SCAN 針對連續訪問對文件緩沖進行優化 FILE_FLAG_DELETE_ON_CLOSE 關閉了上一次打開的句柄后,將文件刪除。特別適合臨時文件 */ DWORD dwDesiredAccess = GENERIC_READ | GENERIC_WRITE; DWORD dwShareMode = 0; LPSECURITY_ATTRIBUTES lpSecurityAttributes = 0; DWORD dwCreationDisposition = CREATE_NEW; DWORD dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL; HANDLE hTemplateFile = 0; HANDLE handle = CreateFile(filePath1, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); printf("CreateFile -> HANDLE=0x%x\n", (unsigned int)handle); if (handle != INVALID_HANDLE_VALUE) { FILETIME fCreationTime, fLastAccessTime, fLastWriteTime; // GetFileTime函數用來獲得一個文件或目錄的創建的時間、最后訪問的時間以及最后修改的時間 ret = GetFileTime(handle, &fCreationTime, &fLastAccessTime, &fLastWriteTime); if (ret == 0) { printf("GetFileTime fail(%d)\n", GetLastError()); } else { printf("GetFileTime -> %d\n", ret); } /* 根據一個FILETIME結構的內容,裝載一個SYSTEMTIME結構。 WINBASEAPI _Success_(return != FALSE) BOOL WINAPI FileTimeToSystemTime( _In_ CONST FILETIME * lpFileTime, _Out_ LPSYSTEMTIME lpSystemTime ); */ SYSTEMTIME sysCreationTime, sysLastAccessTime, sysLastWriteTime; ret = FileTimeToSystemTime(&fCreationTime, &sysCreationTime); if (ret == 0) { printf("FileTimeToSystemTime creationTime fail(%d)\n", GetLastError()); } else { printf("FileTimeToSystemTime creationTime -> %d\n", ret); printf("%4d年%2d月%2d日,%2d:%2d:%2d\n", sysCreationTime.wYear, sysCreationTime.wMonth, sysCreationTime.wDay, sysCreationTime.wHour, sysCreationTime.wMinute, sysCreationTime.wSecond); } ret = FileTimeToSystemTime(&fLastAccessTime, &sysLastAccessTime); if (ret == 0) { printf("FileTimeToSystemTime lastAccessTime fail(%d)\n", GetLastError()); } else { printf("FileTimeToSystemTime lastAccessTime -> %d\n", ret); printf("%4d年%2d月%2d日,%2d:%2d:%2d\n", sysLastAccessTime.wYear, sysLastAccessTime.wMonth, sysLastAccessTime.wDay, sysLastAccessTime.wHour, sysLastAccessTime.wMinute, sysLastAccessTime.wSecond); } ret = FileTimeToSystemTime(&fLastWriteTime, &sysLastWriteTime); if (ret == 0) { printf("FileTimeToSystemTime lastWriteTime fail(%d)\n", GetLastError()); } else { printf("FileTimeToSystemTime lastWriteTime -> %d\n", ret); printf("%4d年%2d月%2d日,%2d:%2d:%2d\n", sysLastWriteTime.wYear, sysLastWriteTime.wMonth, sysLastWriteTime.wDay, sysLastWriteTime.wHour, sysLastWriteTime.wMinute, sysLastWriteTime.wSecond); } //用完要記得關閉,否則其他操作會失敗,GetLastError()=32 => 進程無法訪問文件,因為另一個程序正在使用此文件。 CloseHandle(handle); } /* 復制文件 BOOL WINAPI CopyFile( _In_ LPCTSTR lpExistingFileName, _In_ LPCTSTR lpNewFileName, _In_ BOOL bFailIfExists ); return 失敗返回0,成功返回非0。 */ ret = CopyFile(filePath1, filePath2, true); if (ret == 0) { printf("CopyFile fail(%d)\n", GetLastError()); } else { printf("CopyFile -> %d\n", ret); } /* 刪除文件 BOOL DeleteFile( LPCSTRlpFileName//要刪除的文件名的指針 ); return 失敗返回0,成功返回非0。如果程序嘗試刪除一個不存在的文件。GetLastError返回ERROR_FILE_NOT_FOUND。如果文件是只讀 的,則GetLastError返回ERROR_ACCESS_DENIED */ ret = DeleteFile(filePath1); if (ret == 0) { printf("DeleteFile fail(%d)\n", GetLastError()); } else { printf("DeleteFile -> %d\n", ret); } /* 移動一個存在的文件或者目錄(包括子目錄) WINBASEAPI BOOL WINAPI MoveFileW( _In_ LPCWSTR lpExistingFileName, _In_ LPCWSTR lpNewFileName ); return 失敗返回0,成功返回非0。 */ ret = MoveFile(filePath2, filePath1); if (ret == 0) { printf("MoveFile fail(%d)\n", GetLastError()); } else { printf("MoveFile -> %d\n", ret); } /* WINBASEAPI DWORD WINAPI GetFileAttributesW( _In_ LPCWSTR lpFileName ); #define FILE_ATTRIBUTE_READONLY 0x00000001 #define FILE_ATTRIBUTE_HIDDEN 0x00000002 #define FILE_ATTRIBUTE_SYSTEM 0x00000004 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 #define FILE_ATTRIBUTE_DEVICE 0x00000040 #define FILE_ATTRIBUTE_NORMAL 0x00000080 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800 #define FILE_ATTRIBUTE_OFFLINE 0x00001000 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 #define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000 #define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x00020000 #define FILE_ATTRIBUTE_EA 0x00040000 */ DWORD attr = GetFileAttributes(filePath1); if (attr == INVALID_FILE_ATTRIBUTES) { printf("GetFileAttributes fail(%d)", GetLastError()); } else { printf("GetFileAttributes -> 0x%x\n", attr); } DeleteFile(filePath1); /* 創建文件夾(注意: 目錄沒有復制操作) WINBASEAPI BOOL WINAPI CreateDirectoryW( _In_ LPCWSTR lpPathName, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes ); return 失敗返回0,成功返回非0。 */ ret = CreateDirectory(dirPath1, 0); if (ret == 0) { printf("CreateDirectory fail(%d)\n", GetLastError()); } else { printf("CreateDirectory -> %d\n", ret); } /* 刪除目錄(注意:目錄必須為空,否則會報145錯誤) WINBASEAPI BOOL WINAPI RemoveDirectoryW( _In_ LPCWSTR lpPathName ); */ ret = RemoveDirectory(dirPath1); if (ret == 0) { printf("RemoveDirectory fail(%d)\n", GetLastError()); } else { printf("RemoveDirectory -> %d\n", ret); } system("pause"); return 0; }

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
API C++ Windows
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。