aboutsummaryrefslogtreecommitdiff
path: root/src/dutil/inc/fileutil.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/dutil/inc/fileutil.h')
-rw-r--r--src/dutil/inc/fileutil.h235
1 files changed, 235 insertions, 0 deletions
diff --git a/src/dutil/inc/fileutil.h b/src/dutil/inc/fileutil.h
new file mode 100644
index 00000000..ddae340f
--- /dev/null
+++ b/src/dutil/inc/fileutil.h
@@ -0,0 +1,235 @@
1#pragma once
2// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
3
4
5#ifdef __cplusplus
6extern "C" {
7#endif
8
9#define ReleaseFile(h) if (INVALID_HANDLE_VALUE != h) { ::CloseHandle(h); h = INVALID_HANDLE_VALUE; }
10#define ReleaseFileHandle(h) if (INVALID_HANDLE_VALUE != h) { ::CloseHandle(h); h = INVALID_HANDLE_VALUE; }
11#define ReleaseFileFindHandle(h) if (INVALID_HANDLE_VALUE != h) { ::FindClose(h); h = INVALID_HANDLE_VALUE; }
12
13#define FILEMAKEVERSION(major, minor, build, revision) static_cast<DWORD64>((static_cast<DWORD64>(major & 0xFFFF) << 48) \
14 | (static_cast<DWORD64>(minor & 0xFFFF) << 32) \
15 | (static_cast<DWORD64>(build & 0xFFFF) << 16) \
16 | (static_cast<DWORD64>(revision & 0xFFFF)))
17
18typedef enum FILE_ARCHITECTURE
19{
20 FILE_ARCHITECTURE_UNKNOWN,
21 FILE_ARCHITECTURE_X86,
22 FILE_ARCHITECTURE_X64,
23 FILE_ARCHITECTURE_IA64,
24} FILE_ARCHITECTURE;
25
26typedef enum FILE_ENCODING
27{
28 FILE_ENCODING_UNSPECIFIED = 0,
29 // TODO: distinguish between non-BOM utf-8 and ANSI in the future?
30 FILE_ENCODING_UTF8,
31 FILE_ENCODING_UTF8_WITH_BOM,
32 FILE_ENCODING_UTF16,
33 FILE_ENCODING_UTF16_WITH_BOM,
34} FILE_ENCODING;
35
36
37LPWSTR DAPI FileFromPath(
38 __in_z LPCWSTR wzPath
39 );
40HRESULT DAPI FileResolvePath(
41 __in_z LPCWSTR wzRelativePath,
42 __out LPWSTR *ppwzFullPath
43 );
44HRESULT DAPI FileStripExtension(
45 __in_z LPCWSTR wzFileName,
46 __out LPWSTR *ppwzFileNameNoExtension
47 );
48HRESULT DAPI FileChangeExtension(
49 __in_z LPCWSTR wzFileName,
50 __in_z LPCWSTR wzNewExtension,
51 __out LPWSTR *ppwzFileNameNewExtension
52 );
53HRESULT DAPI FileAddSuffixToBaseName(
54 __in_z LPCWSTR wzFileName,
55 __in_z LPCWSTR wzSuffix,
56 __out_z LPWSTR* psczNewFileName
57 );
58HRESULT DAPI FileVersionFromString(
59 __in_z LPCWSTR wzVersion,
60 __out DWORD *pdwVerMajor,
61 __out DWORD* pdwVerMinor
62 );
63HRESULT DAPI FileVersionFromStringEx(
64 __in_z LPCWSTR wzVersion,
65 __in DWORD cchVersion,
66 __out DWORD64* pqwVersion
67 );
68HRESULT DAPI FileVersionToStringEx(
69 __in DWORD64 qwVersion,
70 __out LPWSTR* psczVersion
71 );
72HRESULT DAPI FileSetPointer(
73 __in HANDLE hFile,
74 __in DWORD64 dw64Move,
75 __out_opt DWORD64* pdw64NewPosition,
76 __in DWORD dwMoveMethod
77 );
78HRESULT DAPI FileSize(
79 __in_z LPCWSTR pwzFileName,
80 __out LONGLONG* pllSize
81 );
82HRESULT DAPI FileSizeByHandle(
83 __in HANDLE hFile,
84 __out LONGLONG* pllSize
85 );
86BOOL DAPI FileExistsEx(
87 __in_z LPCWSTR wzPath,
88 __out_opt DWORD *pdwAttributes
89 );
90BOOL DAPI FileExistsAfterRestart(
91 __in_z LPCWSTR wzPath,
92 __out_opt DWORD *pdwAttributes
93 );
94HRESULT DAPI FileRemoveFromPendingRename(
95 __in_z LPCWSTR wzPath
96 );
97HRESULT DAPI FileRead(
98 __deref_out_bcount_full(*pcbDest) LPBYTE* ppbDest,
99 __out DWORD* pcbDest,
100 __in_z LPCWSTR wzSrcPath
101 );
102HRESULT DAPI FileReadEx(
103 __deref_out_bcount_full(*pcbDest) LPBYTE* ppbDest,
104 __out DWORD* pcbDest,
105 __in_z LPCWSTR wzSrcPath,
106 __in DWORD dwShareMode
107 );
108HRESULT DAPI FileReadUntil(
109 __deref_out_bcount_full(*pcbDest) LPBYTE* ppbDest,
110 __out_range(<=, cbMaxRead) DWORD* pcbDest,
111 __in_z LPCWSTR wzSrcPath,
112 __in DWORD cbMaxRead
113 );
114HRESULT DAPI FileReadPartial(
115 __deref_out_bcount_full(*pcbDest) LPBYTE* ppbDest,
116 __out_range(<=, cbMaxRead) DWORD* pcbDest,
117 __in_z LPCWSTR wzSrcPath,
118 __in BOOL fSeek,
119 __in DWORD cbStartPosition,
120 __in DWORD cbMaxRead,
121 __in BOOL fPartialOK
122 );
123HRESULT DAPI FileReadPartialEx(
124 __deref_out_bcount_full(*pcbDest) LPBYTE* ppbDest,
125 __out_range(<=, cbMaxRead) DWORD* pcbDest,
126 __in_z LPCWSTR wzSrcPath,
127 __in BOOL fSeek,
128 __in DWORD cbStartPosition,
129 __in DWORD cbMaxRead,
130 __in BOOL fPartialOK,
131 __in DWORD dwShareMode
132 );
133HRESULT DAPI FileWrite(
134 __in_z LPCWSTR pwzFileName,
135 __in DWORD dwFlagsAndAttributes,
136 __in_bcount_opt(cbData) LPCBYTE pbData,
137 __in DWORD cbData,
138 __out_opt HANDLE* pHandle
139 );
140HRESULT DAPI FileWriteHandle(
141 __in HANDLE hFile,
142 __in_bcount_opt(cbData) LPCBYTE pbData,
143 __in DWORD cbData
144 );
145HRESULT DAPI FileCopyUsingHandles(
146 __in HANDLE hSource,
147 __in HANDLE hTarget,
148 __in DWORD64 cbCopy,
149 __out_opt DWORD64* pcbCopied
150 );
151HRESULT DAPI FileEnsureCopy(
152 __in_z LPCWSTR wzSource,
153 __in_z LPCWSTR wzTarget,
154 __in BOOL fOverwrite
155 );
156HRESULT DAPI FileEnsureCopyWithRetry(
157 __in LPCWSTR wzSource,
158 __in LPCWSTR wzTarget,
159 __in BOOL fOverwrite,
160 __in DWORD cRetry,
161 __in DWORD dwWaitMilliseconds
162 );
163HRESULT DAPI FileEnsureMove(
164 __in_z LPCWSTR wzSource,
165 __in_z LPCWSTR wzTarget,
166 __in BOOL fOverwrite,
167 __in BOOL fAllowCopy
168 );
169HRESULT DAPI FileEnsureMoveWithRetry(
170 __in LPCWSTR wzSource,
171 __in LPCWSTR wzTarget,
172 __in BOOL fOverwrite,
173 __in BOOL fAllowCopy,
174 __in DWORD cRetry,
175 __in DWORD dwWaitMilliseconds
176 );
177HRESULT DAPI FileCreateTemp(
178 __in_z LPCWSTR wzPrefix,
179 __in_z LPCWSTR wzExtension,
180 __deref_opt_out_z LPWSTR* ppwzTempFile,
181 __out_opt HANDLE* phTempFile
182 );
183HRESULT DAPI FileCreateTempW(
184 __in_z LPCWSTR wzPrefix,
185 __in_z LPCWSTR wzExtension,
186 __deref_opt_out_z LPWSTR* ppwzTempFile,
187 __out_opt HANDLE* phTempFile
188 );
189HRESULT DAPI FileVersion(
190 __in_z LPCWSTR wzFilename,
191 __out DWORD *pdwVerMajor,
192 __out DWORD* pdwVerMinor
193 );
194HRESULT DAPI FileIsSame(
195 __in_z LPCWSTR wzFile1,
196 __in_z LPCWSTR wzFile2,
197 __out LPBOOL lpfSameFile
198 );
199HRESULT DAPI FileEnsureDelete(
200 __in_z LPCWSTR wzFile
201 );
202HRESULT DAPI FileGetTime(
203 __in_z LPCWSTR wzFile,
204 __out_opt LPFILETIME lpCreationTime,
205 __out_opt LPFILETIME lpLastAccessTime,
206 __out_opt LPFILETIME lpLastWriteTime
207 );
208HRESULT DAPI FileSetTime(
209 __in_z LPCWSTR wzFile,
210 __in_opt const FILETIME *lpCreationTime,
211 __in_opt const FILETIME *lpLastAccessTime,
212 __in_opt const FILETIME *lpLastWriteTime
213 );
214HRESULT DAPI FileResetTime(
215 __in_z LPCWSTR wzFile
216 );
217HRESULT DAPI FileExecutableArchitecture(
218 __in_z LPCWSTR wzFile,
219 __out FILE_ARCHITECTURE *pArchitecture
220 );
221HRESULT DAPI FileToString(
222 __in_z LPCWSTR wzFile,
223 __out LPWSTR *psczString,
224 __out_opt FILE_ENCODING *pfeEncoding
225 );
226HRESULT DAPI FileFromString(
227 __in_z LPCWSTR wzFile,
228 __in DWORD dwFlagsAndAttributes,
229 __in_z LPCWSTR sczString,
230 __in FILE_ENCODING feEncoding
231 );
232
233#ifdef __cplusplus
234}
235#endif