Alternate e697dbe9c5997e35395fe158628dd8c5209481da
for Visual Studio 2022 and Windows 11.
読み取り中…
検索中…
一致する文字列を見つけられません
FileUtilityTest.cpp
[詳解]
1
5
6#include "pch.h"
7#include "FileUtility.h"
8#include "Thread.h"
9#include "Utility.h"
10
11using namespace Microsoft::VisualStudio::CppUnitTestFramework;
12
13namespace WindowsLibraryTest
14{
15 TEST_CLASS (FileUtilityTest)
16 {
17 public:
18 TEST_CLASS_INITIALIZE (ClassInitialize)
19 {
20 Logger::WriteMessage ("FileUtilityTest class initialize.\n");
21 }
22
23 TEST_CLASS_CLEANUP (ClassCleanup)
24 {
25 Logger::WriteMessage ("FileUtilityTest class cleanup.\n");
26 }
27
28 TEST_METHOD_INITIALIZE (MethodInitialize)
29 {
30 Logger::WriteMessage ("FileUtilityTest method initialize.\n");
31 }
32
33 TEST_METHOD_CLEANUP (MethodCleanup)
34 {
35 Logger::WriteMessage ("FileUtilityTest method cleanup.\n");
36 }
37
38 void ShowFileInformation1 (alt::FileInfo1& item)
39 {
40 alt::TString output;
41
42 output.Format (_T ("%s %s %lld\n"),
43 item.GetFolderName ().Ctr (),
44 item.GetFileName ().Ctr (),
45 item.GetFileSize ());
46 Logger::WriteMessage (output.Ctr ());
47
48 BOOL isReadOnly = item.IsReadOnly ();
49 BOOL isHidden = item.IsHidden ();
50 BOOL isSystem = item.IsSystem ();
51 BOOL isDirectory = item.IsDirectory ();
52 BOOL isArchive = item.IsArchive ();
53 BOOL isTemporary = item.IsTemporary ();
54 BOOL isCompressed = item.IsCompressed ();
55 output.Format (_T ("D(%d) R(%d) H(%d) S(%d) A(%d) T(%d) C(%d)\n"),
56 isDirectory, isReadOnly, isHidden, isSystem,
57 isArchive, isTemporary, isCompressed);
58 Logger::WriteMessage (output.Ctr ());
59
60 SYSTEMTIME ct = alt::Utility::GetTimeByFileTime (item.GetCreateTime ());
61 output.Format (_T ("CT:%04d/%02d/%02d %02d:%02d:%02d.%03d\n"),
62 ct.wYear, ct.wMonth, ct.wDay,
63 ct.wHour, ct.wMinute, ct.wSecond,
64 ct.wMilliseconds);
65 Logger::WriteMessage (output.Ctr ());
66
67 SYSTEMTIME ut = alt::Utility::GetTimeByFileTime (item.GetUpdateTime ());
68 output.Format (_T ("UT:%04d/%02d/%02d %02d:%02d:%02d.%03d\n"),
69 ut.wYear, ut.wMonth, ut.wDay,
70 ut.wHour, ut.wMinute, ut.wSecond,
71 ut.wMilliseconds);
72 Logger::WriteMessage (output.Ctr ());
73
74 SYSTEMTIME at = alt::Utility::GetTimeByFileTime (item.GetAccessTime ());
75 output.Format (_T ("AT:%04d/%02d/%02d %02d:%02d:%02d.%03d\n"),
76 at.wYear, at.wMonth, at.wDay,
77 at.wHour, at.wMinute, at.wSecond,
78 at.wMilliseconds);
79 Logger::WriteMessage (output.Ctr ());
80
81 Logger::WriteMessage (_T ("\n"));
82 }
83
84 void ShowFileInformation2 (alt::FileInfo2& item)
85 {
86 alt::TString output;
87
88 if (item.GetAction () == (DWORD)-1)
89 {
90 Logger::WriteMessage ("FileUtility::DirectoryWatch() returns error.\n");
91 return;
92 }
93
94 output.Format (_T ("%s %lld\n"),
95 item.GetFileName ().Ctr (),
96 item.GetFileSize ());
97 Logger::WriteMessage (output.Ctr ());
98
99 BOOL isReadOnly = item.IsReadOnly ();
100 BOOL isHidden = item.IsHidden ();
101 BOOL isSystem = item.IsSystem ();
102 BOOL isDirectory = item.IsDirectory ();
103 BOOL isArchive = item.IsArchive ();
104 BOOL isTemporary = item.IsTemporary ();
105 BOOL isCompressed = item.IsCompressed ();
106 output.Format (_T ("D(%d) R(%d) H(%d) S(%d) A(%d) T(%d) C(%d)\n"),
107 isDirectory, isReadOnly, isHidden, isSystem,
108 isArchive, isTemporary, isCompressed);
109 Logger::WriteMessage (output.Ctr ());
110
111 BOOL isAdded = item.IsAdded ();
112 BOOL isRemoved = item.IsRemoved ();
113 BOOL isModified = item.IsModified ();
114 BOOL isOldName = item.IsOldName ();
115 BOOL isNewName = item.IsNewName ();
116 output.Format (_T ("Added(%d) Removed(%d) Modified(%d) OldName(%d) NewName(%d)\n"),
117 isAdded, isRemoved, isModified, isOldName, isNewName);
118 Logger::WriteMessage (output.Ctr ());
119
120 SYSTEMTIME ct = alt::Utility::GetTimeByFileTime (item.GetCreateTime ());
121 output.Format (_T ("CT:%04d/%02d/%02d %02d:%02d:%02d.%03d\n"),
122 ct.wYear, ct.wMonth, ct.wDay,
123 ct.wHour, ct.wMinute, ct.wSecond,
124 ct.wMilliseconds);
125 Logger::WriteMessage (output.Ctr ());
126
127 SYSTEMTIME ut = alt::Utility::GetTimeByFileTime (item.GetUpdateTime ());
128 output.Format (_T ("UT:%04d/%02d/%02d %02d:%02d:%02d.%03d\n"),
129 ut.wYear, ut.wMonth, ut.wDay,
130 ut.wHour, ut.wMinute, ut.wSecond,
131 ut.wMilliseconds);
132 Logger::WriteMessage (output.Ctr ());
133
134 SYSTEMTIME at = alt::Utility::GetTimeByFileTime (item.GetAccessTime ());
135 output.Format (_T ("AT:%04d/%02d/%02d %02d:%02d:%02d.%03d\n"),
136 at.wYear, at.wMonth, at.wDay,
137 at.wHour, at.wMinute, at.wSecond,
138 at.wMilliseconds);
139 Logger::WriteMessage (output.Ctr ());
140
141 output.Format (_T ("FileID:%lld\n"), item.GetFileID ());
142
143 Logger::WriteMessage (_T ("\n"));
144 }
145
146 TEST_METHOD (DeleteTest)
147 {
148 BOOL ret;
149 alt::TString tempFolder =
151 alt::TString tempFile =
153 tempFolder.Ctr (), _T ("FUTL"), 0); // 0指定で作成される。
154 Logger::WriteMessage (tempFile.Ctr ());
155 Logger::WriteMessage (_T ("\n"));
156
157 ret = alt::FileUtility::IsExist (tempFile.Ctr ());
158 Assert::IsTrue (ret, _T ("テンポラリファイルが作成されませんでした。\n"));
159
160 ret = alt::FileUtility::Delete (tempFile.Ctr ());
161 Assert::IsTrue (ret, _T ("failed Delete()\n"));
162
163 ret = alt::FileUtility::IsExist (tempFile.Ctr ());
164 Assert::IsFalse (ret, _T ("failed Delete(). still file is exist.\n"));
165 }
166
167 TEST_METHOD (CopyTest)
168 {
169 BOOL ret;
170 alt::TString tempFolder =
172 alt::TString tempFile =
174 tempFolder.Ctr (), _T ("FUTL"), 0); // 0指定で作成される。
175 Logger::WriteMessage (tempFile.Ctr ());
176 Logger::WriteMessage (_T ("\n"));
177
178 ret = alt::FileUtility::IsExist (tempFile.Ctr ());
179 Assert::IsTrue (ret, _T ("テンポラリファイルが作成されませんでした。\n"));
180
181 alt::TString tempFile2 =
183 tempFolder.Ctr (), _T ("FUTL"), 1);
184 Logger::WriteMessage (tempFile2.Ctr ());
185 Logger::WriteMessage (_T ("\n"));
186
187 ret = alt::FileUtility::Copy (tempFile.Ctr (), tempFile2.Ctr ());
188 Assert::IsTrue (ret, _T ("failed Copy()\n"));
189
190 ret = alt::FileUtility::IsExist (tempFile2.Ctr ());
191 Assert::IsTrue (ret, _T ("failed Copy(). file is not copied.\n"));
192
193 alt::FileUtility::Delete (tempFile.Ctr ());
194 alt::FileUtility::Delete (tempFile2.Ctr ());
195 }
196
197 TEST_METHOD (MoveTest)
198 {
199 BOOL ret;
200 alt::TString tempFolder =
202 alt::TString tempFile =
204 tempFolder.Ctr (), _T ("FUTL"), 0); // 0指定で作成される。
205 Logger::WriteMessage (tempFile.Ctr ());
206 Logger::WriteMessage (_T ("\n"));
207
208 ret = alt::FileUtility::IsExist (tempFile.Ctr ());
209 Assert::IsTrue (ret, _T ("テンポラリファイルが作成されませんでした。\n"));
210
211 alt::TString tempFile2 =
213 tempFolder.Ctr (), _T ("FUTL"), 1);
214 Logger::WriteMessage (tempFile2.Ctr ());
215 Logger::WriteMessage (_T ("\n"));
216
217 ret = alt::FileUtility::Move (tempFile.Ctr (), tempFile2.Ctr ());
218 Assert::IsTrue (ret, _T ("failed Move()\n"));
219
220 ret = alt::FileUtility::IsExist (tempFile2.Ctr ());
221 Assert::IsTrue (ret, _T ("failed Move(). file is not moved.\n"));
222
223 ret = alt::FileUtility::IsExist (tempFile.Ctr ());
224 Assert::IsFalse (ret, _T ("failed Move(). file is still exist.\n"));
225
226 alt::FileUtility::Delete (tempFile.Ctr ());
227 alt::FileUtility::Delete (tempFile2.Ctr ());
228 }
229
230 TEST_METHOD (MakeAndRemoveDirTest)
231 {
232 BOOL ret;
233 alt::TString tempFolder =
235 alt::TString tempFile =
237 tempFolder.Ctr (), _T ("FUTL"), 1);
238 Logger::WriteMessage (tempFile.Ctr ());
239 Logger::WriteMessage (_T ("\n"));
240
241 ret = alt::FileUtility::MakeDir (tempFile.Ctr ());
242 Assert::IsTrue (ret, _T ("failed MakeDir()\n"));
243
244 ret = alt::FileUtility::IsExist (tempFile.Ctr ());
245 Assert::IsTrue (ret, _T ("failed MakeDir()\n"));
246
247 ret = alt::FileUtility::IsDirectory (tempFile.Ctr ());
248 Assert::IsTrue (ret, _T ("failed MakeDir()\n"));
249
250 ret = alt::FileUtility::RemoveDir (tempFile.Ctr ());
251 Assert::IsTrue (ret, _T ("failed RemoveDir()\n"));
252
253 ret = alt::FileUtility::IsExist (tempFile.Ctr ());
254 Assert::IsFalse (ret, _T ("failed RemoveDir()\n"));
255 }
256
257 TEST_METHOD (FindTest1)
258 {
260 alt::FileUtility::SetCurrentDir (_T ("C:\\Windows\\system32"));
261 auto response = alt::FileUtility::Find (_T ("."), _T ("*.cpl"));
262 int i = 0;
263 for (auto& item : response)
264 {
265 ShowFileInformation1 (item);
266 if (++i == 100) break;
267 }
268 alt::FileUtility::SetCurrentDir (currentDir.Ctr ());
269 }
270
271 TEST_METHOD (FindTest2)
272 {
273 LPCTSTR lpctszFolder = _T ("C:\\Windows\\system32");
274 LPCTSTR lpctszFile = _T ("*.cpl");
275 auto response = alt::FileUtility::Find (lpctszFolder, lpctszFile, TRUE);
276 int i = 0;
277 for (auto& item : response)
278 {
279 ShowFileInformation1 (item);
280 if (++i == 100) break;
281 }
282 response.Clear ();
283 }
284
285 TEST_METHOD (FindTest3)
286 {
287 LPCTSTR lpctszFolder = _T ("C:\\Windows\\system32");
288 LPCTSTR lpctszFile = _T ("*");
289 auto response = alt::FileUtility::Find (lpctszFolder, lpctszFile, TRUE);
290 int i = 0;
291 for (auto& item : response)
292 {
293 ShowFileInformation1 (item);
294 if (++i == 100) break;
295 }
296 response.Clear ();
297 }
298
299 TEST_METHOD (Find2Test3)
300 {
301 LPCTSTR lpctszFolder = _T ("C:\\Windows\\system32");
302 LPCTSTR lpctszFile = _T ("*");
304
305 alt::FileUtility::Find2 (lpctszFolder, lpctszFile, TRUE, response);
306 int i = 0;
307 for (auto& item : response)
308 {
309 ShowFileInformation1 (item);
310 if (++i == 100) break;
311 }
312 response.Clear ();
313 }
314
315 TEST_METHOD (DirectoryWatchTest)
316 {
318
319 auto watchFunction = [](LPVOID lpvParam)->DWORD
320 {
321 Response* response = static_cast<Response*>(lpvParam);
323
324 *response = alt::FileUtility::DirectoryWatch (temporaryPath.Ctr (), 3000);
325
326 Logger::WriteMessage (_T ("[watchFunction] finished.\n"));
327 return 0;
328 };
329
330 auto eventFunction = [](LPVOID lpvParam)->DWORD
331 {
332 BOOL ret;
334 Logger::WriteMessage (temporaryPath.Ctr ());
335 alt::File temporaryFile;
336
337 for (int i = 1; i <= 5; i++)
338 {
339 alt::TString temporaryFileName = alt::FileUtility::GetTemporaryFileName (temporaryPath.Ctr (), _T ("DWT"), i);
340 Logger::WriteMessage (temporaryFileName.Ctr ());
341 Logger::WriteMessage (_T ("\n"));
342
343 ret = temporaryFile.Create (temporaryFileName.Ctr (), GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE, CREATE_ALWAYS);
344 Assert::IsTrue (ret, _T ("File::Create() failed.\n"));
345 Logger::WriteMessage (_T ("[eventFunction] file created.\n"));
346
347 BYTE byData[]{ 1,2,3,4,5,6,7,8,9,10 };
348 DWORD dwSize = temporaryFile.Write (byData, sizeof (byData));
349 Logger::WriteMessage (_T ("[eventFunction] file modified.\n"));
350
351 ret = temporaryFile.Close ();
352 Assert::IsTrue (ret, _T ("File::Close() failed.\n"));
353 Logger::WriteMessage (_T ("[eventFunction] file closed.\n"));
354
355 ret = alt::FileUtility::Delete (temporaryFileName.Ctr ());
356 Assert::IsTrue (ret, _T ("FileUtility::Delete() failed.\n"));
357 Logger::WriteMessage (_T ("[eventFunction file deleted.\n"));
358
359 Sleep (50);
360 }
361
362 Logger::WriteMessage (_T ("[eventFunction] finished.\n"));
363 return 0;
364 };
365
366 alt::Thread watchThread;
367 Response response;
368 Assert::IsTrue (watchThread.Create (watchFunction, (LPVOID)&response));
369
370 alt::Thread eventThread;
371 Assert::IsTrue (eventThread.Create (eventFunction));
372
373 Assert::AreEqual<DWORD> (WAIT_OBJECT_0, eventThread.Wait (), _T ("eventThread.Wait() failed."));
374 Logger::WriteMessage (_T ("[eventThread] finished.\n"));
375
376 Assert::AreEqual<DWORD> (WAIT_OBJECT_0, watchThread.Wait (), _T ("watchThread.Wait() failed."));
377 Logger::WriteMessage (_T ("[watchThread] finished.\n"));
378
379 for (auto& item : response)
380 {
381 ShowFileInformation2 (item);
382 }
383 }
384
385#if defined (_MSC_VER) && (_MSC_VER >= 1910) // VS2017 over
386
387 // TODO:管理者権限か開発者モードにしないと実行できません。
388 //TEST_METHOD(SymbolicLinkFileTest)
389 //{
390 // BOOL ret;
391 // LPCTSTR lpctszBase = _T(".\\WindowsLibrary.dll");
392 // LPCTSTR lpctszTarget = _T(".\\linkBase.bin");
393 // LPCTSTR lpctszSymlink = _T(".\\linkSymbolic.bin");
394
395 // ret = FileUtility::Copy(lpctszBase, lpctszTarget);
396 // Assert::IsTrue(ret, _T("FileUtility::Copy() failed.\n"));
397 // ret = FileUtility::MakeSymbolicLink(lpctszTarget, lpctszSymlink);
398 // Assert::IsTrue(ret, _T("FileUtility::MakeSymbolicLink() failed.\n"));
399 // ret = FileUtility::Delete(lpctszSymlink);
400 // Assert::IsTrue(ret, _T("FileUtility::Delete() failed.\n"));
401 // ret = FileUtility::Delete(lpctszTarget);
402 // Assert::IsTrue(ret, _T("FileUtility::Delete() failed.\n"));
403 //}
404
405#endif
406
407 //TEST_METHOD(SymbolicLinkDirectoryTest)
408 //{
409
410 //}
411
412 TEST_METHOD (HardLinkFileTest)
413 {
414 BOOL ret;
415 LPCTSTR lpctszBase = _T (".\\WindowsLibrary.dll");
416 LPCTSTR lpctszTarget = _T (".\\linkBase.bin");
417 LPCTSTR lpctszSymlink = _T (".\\linkHard.bin");
418
419 ret = alt::FileUtility::Copy (lpctszBase, lpctszTarget);
420 Assert::IsTrue (ret, _T ("FileUtility::Copy() failed.\n"));
421 ret = alt::FileUtility::MakeHardLink (lpctszTarget, lpctszSymlink);
422 Assert::IsTrue (ret, _T ("FileUtility::MakeHardLink() failed.\n"));
423 ret = alt::FileUtility::Delete (lpctszSymlink);
424 Assert::IsTrue (ret, _T ("FileUtility::Delete() failed.\n"));
425 ret = alt::FileUtility::Delete (lpctszTarget);
426 Assert::IsTrue (ret, _T ("FileUtility::Delete() failed.\n"));
427 }
428
429 TEST_METHOD (GetTemporaryPathTest)
430 {
432 Logger::WriteMessage (response.Ctr ());
433 Logger::WriteMessage ("\n");
434 }
435
436 TEST_METHOD (GetTemporaryFileNameTest)
437 {
438 {
441 _T ("alt"), 0);
442
443 Logger::WriteMessage (response.Ctr ());
444 Logger::WriteMessage ("\n");
445 }
446
447 {
450 _T ("alt"), 1);
451
452 Logger::WriteMessage (response.Ctr ());
453 Logger::WriteMessage ("\n");
454 }
455
456 }
457
458 TEST_METHOD (GetAbsolutePathTest1)
459 {
460 alt::TString relativePath = _T ("Notepad.exe");
461 alt::TString response = alt::FileUtility::GetAbsolutePath (relativePath.Ctr ());
462 Logger::WriteMessage (response.Ctr ());
463 Logger::WriteMessage (_T ("\n"));
464 }
465
466 TEST_METHOD (GetAbsolutePathTest2)
467 {
468 alt::TString relativePath = _T ("Temporary\\Sample\\");
469 alt::TString response = alt::FileUtility::GetAbsolutePath (relativePath.Ctr ());
470 Logger::WriteMessage (response.Ctr ());
471 Logger::WriteMessage (_T ("\n"));
472 }
473
474 TEST_METHOD (SHFileOperationsCopy)
475 {
476 BOOL ret;
477
478 alt::TString temporaryPath1;
479 temporaryPath1 = alt::FileUtility::GetTemporaryPath ();
480 temporaryPath1 += _T ("\\CopyTest1");
481 ret = alt::FileUtility::MakeDir (temporaryPath1.Ctr ());
482 Assert::IsTrue (ret, _T ("FileUtility::MakeDir() failed.\n"));
483 Logger::WriteMessage (temporaryPath1.Ctr ());
484
485 alt::TString temporaryFileName;
486
487 for (int i = 0; i < 10; i++)
488 {
489 temporaryFileName = alt::FileUtility::GetTemporaryFileName (temporaryPath1.Ctr (), _T ("DWT"), i);
490 Logger::WriteMessage (temporaryFileName.Ctr ());
491 Logger::WriteMessage (_T ("\n"));
492
493 alt::File temporaryFile;
494 ret = temporaryFile.Create (temporaryFileName.Ctr (), GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE, CREATE_ALWAYS);
495 Assert::IsTrue (ret, _T ("File::Create() failed.\n"));
496 Logger::WriteMessage (_T ("file created.\n"));
497
498 BYTE byData[]{ 1,2,3,4,5,6,7,8,9,10 };
499 DWORD dwSize = temporaryFile.Write (byData, sizeof (byData));
500 Logger::WriteMessage (_T ("file modified.\n"));
501
502 ret = temporaryFile.Close ();
503 Assert::IsTrue (ret, _T ("File::Close() failed.\n"));
504 Logger::WriteMessage (_T ("file closed.\n"));
505 }
506
507 alt::TString temporaryPath2;
508 temporaryPath2 = alt::FileUtility::GetTemporaryPath ();
509 temporaryPath2 += _T ("\\CopyTest2");
510 Logger::WriteMessage (temporaryPath2.Ctr ());
511
513 int response = alt::FileUtility::SHFileOperations (operation, temporaryPath1.Ctr (), temporaryPath2.Ctr ());
514
515 Assert::IsTrue (alt::FileUtility::IsExist (temporaryPath2.Ctr ()), _T ("The folder is not exist.\n"));
516
517 // 後片付け
518 response = alt::FileUtility::SHFileOperations (alt::ShellOperation::REMOVE, temporaryPath1.Ctr (), NULL);
519 response = alt::FileUtility::SHFileOperations (alt::ShellOperation::REMOVE, temporaryPath2.Ctr (), NULL);
520 }
521
522 TEST_METHOD (SHFileOperationsMove)
523 {
524 BOOL ret;
525
526 alt::TString temporaryPath1;
527 temporaryPath1 = alt::FileUtility::GetTemporaryPath ();
528 temporaryPath1 += _T ("\\CopyTest1");
529 ret = alt::FileUtility::MakeDir (temporaryPath1.Ctr ());
530 Assert::IsTrue (ret, _T ("FileUtility::MakeDir() failed.\n"));
531 Logger::WriteMessage (temporaryPath1.Ctr ());
532
533 alt::TString temporaryFileName;
534
535 for (int i = 0; i < 10; i++)
536 {
537 temporaryFileName = alt::FileUtility::GetTemporaryFileName (temporaryPath1.Ctr (), _T ("DWT"), i);
538 Logger::WriteMessage (temporaryFileName.Ctr ());
539 Logger::WriteMessage (_T ("\n"));
540
541 alt::File temporaryFile;
542 ret = temporaryFile.Create (temporaryFileName.Ctr (), GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE, CREATE_ALWAYS);
543 Assert::IsTrue (ret, _T ("File::Create() failed.\n"));
544 Logger::WriteMessage (_T ("file created.\n"));
545
546 BYTE byData[]{ 1,2,3,4,5,6,7,8,9,10 };
547 DWORD dwSize = temporaryFile.Write (byData, sizeof (byData));
548 Logger::WriteMessage (_T ("file modified.\n"));
549
550 ret = temporaryFile.Close ();
551 Assert::IsTrue (ret, _T ("File::Close() failed.\n"));
552 Logger::WriteMessage (_T ("file closed.\n"));
553 }
554
555 alt::TString temporaryPath2;
556 temporaryPath2 = alt::FileUtility::GetTemporaryPath ();
557 temporaryPath2 += _T ("\\CopyTest2");
558 Logger::WriteMessage (temporaryPath2.Ctr ());
559
561 int response = alt::FileUtility::SHFileOperations (operation, temporaryPath1.Ctr (), temporaryPath2.Ctr ());
562
563 Assert::IsFalse (alt::FileUtility::IsExist (temporaryPath1.Ctr ()), _T ("The folder is still exist.\n"));
564 Assert::IsTrue (alt::FileUtility::IsExist (temporaryPath2.Ctr ()), _T ("The folder is not exist.\n"));
565
566 // 後片付け
567 response = alt::FileUtility::SHFileOperations (alt::ShellOperation::REMOVE, temporaryPath1.Ctr (), NULL);
568 response = alt::FileUtility::SHFileOperations (alt::ShellOperation::REMOVE, temporaryPath2.Ctr (), NULL);
569 }
570
571 TEST_METHOD (SHFileOperationsDelete)
572 {
573 BOOL ret;
574
575 alt::TString temporaryPath;
576 temporaryPath = alt::FileUtility::GetTemporaryPath ();
577 temporaryPath += _T ("\\DeleteTest");
578 ret = alt::FileUtility::MakeDir (temporaryPath.Ctr ());
579 Assert::IsTrue (ret, _T ("FileUtility::MakeDir() failed.\n"));
580 Logger::WriteMessage (temporaryPath.Ctr ());
581
582 alt::TString temporaryFileName;
583
584 for (int i = 0; i < 10; i++)
585 {
586 temporaryFileName = alt::FileUtility::GetTemporaryFileName (temporaryPath.Ctr (), _T ("DWT"), i);
587 Logger::WriteMessage (temporaryFileName.Ctr ());
588 Logger::WriteMessage (_T ("\n"));
589
590 alt::File temporaryFile;
591 ret = temporaryFile.Create (temporaryFileName.Ctr (), GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE, CREATE_ALWAYS);
592 Assert::IsTrue (ret, _T ("File::Create() failed.\n"));
593 Logger::WriteMessage (_T ("file created.\n"));
594
595 BYTE byData[]{ 1,2,3,4,5,6,7,8,9,10 };
596 DWORD dwSize = temporaryFile.Write (byData, sizeof (byData));
597 Logger::WriteMessage (_T ("file modified.\n"));
598
599 ret = temporaryFile.Close ();
600 Assert::IsTrue (ret, _T ("File::Close() failed.\n"));
601 Logger::WriteMessage (_T ("file closed.\n"));
602 }
603
605 int response = alt::FileUtility::SHFileOperations (operation, temporaryPath.Ctr (), NULL);
606
607 Assert::IsFalse (alt::FileUtility::IsExist (temporaryPath.Ctr ()), _T ("The file is still exist.\n"));
608 }
609 };
610}
ファイルハンドルを伴わないファイルIOに関するWindowsAPIを集約した クラス
スレッドに関するWindowsAPIを集約したクラス
汎用的に使えるユーティリティクラス
プリコンパイル済みヘッダー ファイルです。
ファイルIOに関するWindowsAPIを集約したクラス
Definition: File.h:16
BOOL APIENTRY Create(LPCTSTR lpctszFileName, DWORD dwDesiredAccess, DWORD dwShareMode, DWORD dwCreationDisposition)
ファイルを作成、オープンします。
Definition: File.cpp:12
FileUtility::Find()が返すファイル情報
Definition: FileUtility.h:60
const FILETIME &APIENTRY GetUpdateTime() const
ファイル更新日時の取得
Definition: FileUtility.h:74
const BOOL APIENTRY IsSystem() const
システムファイルか否か
Definition: FileUtility.h:103
const FILETIME &APIENTRY GetAccessTime() const
ファイルアクセス日時の取得
Definition: FileUtility.h:78
const BOOL APIENTRY IsHidden() const
隠しファイルか否か
Definition: FileUtility.h:95
const FILETIME &APIENTRY GetCreateTime() const
ファイル作成日時の取得
Definition: FileUtility.h:70
const BOOL APIENTRY IsArchive() const
アーカイブか否か
Definition: FileUtility.h:119
const BOOL APIENTRY IsCompressed() const
圧縮ファイルか否か
Definition: FileUtility.h:135
const BOOL APIENTRY IsDirectory() const
ディレクトリか否か
Definition: FileUtility.h:111
const BOOL APIENTRY IsTemporary() const
中間ファイルか否か
Definition: FileUtility.h:127
const BOOL APIENTRY IsReadOnly() const
読み取り専用か否か
Definition: FileUtility.h:87
const LONGLONG APIENTRY GetFileID() const
ファイルIDの取得
Definition: FileUtility.h:171
const BOOL APIENTRY IsNewName() const
名前を変更されたか(新ファイル名)
Definition: FileUtility.h:212
const DWORD APIENTRY GetAction() const
ファイル監視結果を取得
Definition: FileUtility.h:167
const BOOL APIENTRY IsOldName() const
名前を変更されたか(旧ファイル名)
Definition: FileUtility.h:204
const BOOL APIENTRY IsRemoved() const
削除されたか
Definition: FileUtility.h:188
const BOOL APIENTRY IsAdded() const
追加されたか
Definition: FileUtility.h:180
const BOOL APIENTRY IsModified() const
変更されたか
Definition: FileUtility.h:196
const TString &APIENTRY GetFolderName() const
フォルダ名の取得
Definition: FileUtility.h:40
const TString &APIENTRY GetFileName() const
ファイル名の取得
Definition: FileUtility.h:44
const ULONGLONG &APIENTRY GetFileSize() const
ファイルサイズの取得
Definition: FileUtility.h:48
static skeleton::Array< FileInfo1 > APIENTRY Find(LPCTSTR target, LPCTSTR name, BOOL bRecurse=FALSE)
ファイルの検索
static TString APIENTRY GetTemporaryFileName(LPCTSTR lpctszPath, LPCTSTR lpctszPrefix, UINT nNumber)
テンポラリファイル名を取得します。
Definition: FileUtility.cpp:72
static BOOL APIENTRY RemoveDir(LPCTSTR name)
ディレクトリの削除
Definition: FileUtility.cpp:87
static TString APIENTRY GetCurrentDir()
カレントディレクトリ名の取得
Definition: FileUtility.cpp:97
static VOID APIENTRY Find2(LPCTSTR target, LPCTSTR name, BOOL bRecurse, skeleton::Array< FileInfo1 > &response)
static BOOL APIENTRY Move(LPCTSTR source, LPCTSTR dest)
ファイルの移動
Definition: FileUtility.cpp:67
static INT APIENTRY SHFileOperations(ShellOperation operation, LPCTSTR lpctszFrom, LPCTSTR lpctszTo)
static BOOL APIENTRY SetCurrentDir(LPCTSTR name)
カレントディレクトリの移動
Definition: FileUtility.cpp:92
static BOOL APIENTRY MakeHardLink(LPCTSTR source, LPCTSTR link)
ハードリンクの作成
static BOOL APIENTRY IsDirectory(LPCTSTR name)
ディレクトリの存在確認
static BOOL APIENTRY MakeDir(LPCTSTR name)
ディレクトリの作成
Definition: FileUtility.cpp:82
static TString APIENTRY GetAbsolutePath(LPCTSTR lpctszRelativePath)
カレントディレクトリのパスを連結して絶対パスの作成
static BOOL APIENTRY Copy(LPCTSTR source, LPCTSTR dest, BOOL bFailIfExists=FALSE)
ファイルのコピー
Definition: FileUtility.cpp:62
static skeleton::Array< FileInfo2 > APIENTRY DirectoryWatch(LPCTSTR lpctszWatchDirectory, DWORD dwTimeout)
ディレクトリの監視
static BOOL APIENTRY IsExist(LPCTSTR name)
ディレクトリ・ファイルの存在確認
static BOOL APIENTRY Delete(LPCTSTR name)
ファイルの削除
Definition: FileUtility.cpp:57
static TString APIENTRY GetTemporaryPath()
テンポラリフォルダを取得します。
BOOL APIENTRY Close()
使用しなくなったハンドルはこれでクローズします。
DWORD APIENTRY Write(LPCVOID lpcvBuffer, DWORD dwSize) const
HANDLEを使ってデータを書き込みます。
文字列に関するWindowsAPIを集約したクラス
Definition: TString.h:17
TString &APIENTRY Format(LPCTSTR format,...)
フォーマットに従ってパラメータを文字列化します。
Definition: TString.cpp:333
LPCTSTR APIENTRY Ctr() const
内部で確保している文字列ポインタを取得します。
Definition: TString.h:46
スレッドに関するWindowsAPIを集約したクラス
Definition: Thread.h:43
BOOL APIENTRY Create(PTHREAD_START_ROUTINE function=NULL, LPVOID lpvParam=NULL, DWORD dwCreationFlag=0)
スレッドを作成します。
Definition: Thread.cpp:24
static SYSTEMTIME APIENTRY GetTimeByFileTime(const FILETIME &fileTime)
FILETIME型からSYSTEMTIMEを取得
Definition: Utility.cpp:84
DWORD APIENTRY Wait(DWORD dwWaitTime=INFINITE) const
シグナル状態になるとブロックを解除します。
サイズ可変の配列を具現したクラス
Definition: Array.hpp:20
VOID APIENTRY Clear()
領域の開放
Definition: Array.hpp:154
TEST_CLASS(ArrayTest)
Definition: ArrayTest.cpp:19
ShellOperation
SHFILEOPSTRUCT.wFuncに渡す、値の列挙
Definition: FileUtility.h:21