ManagedFile.cpp (1536B)
1 // Copyright (c) Microsoft Corporation. 2 // Licensed under the MIT License. 3 #include "pch.h" 4 #include "winget/ManagedFile.h" 5 #include "AppInstallerLogging.h" 6 7 namespace AppInstaller::Utility 8 { 9 ManagedFile ManagedFile::CreateWriteLockedFile(const std::filesystem::path& path, DWORD desiredAccess, bool deleteOnExit) 10 { 11 ManagedFile file; 12 file.m_fileHandle.reset(CreateFileW(path.c_str(), desiredAccess, FILE_SHARE_READ, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr)); 13 THROW_LAST_ERROR_IF(!file.m_fileHandle); 14 file.m_filePath = path; 15 file.m_deleteFileOnExit = deleteOnExit; 16 17 return file; 18 } 19 20 ManagedFile ManagedFile::OpenWriteLockedFile(const std::filesystem::path& path, DWORD desiredAccess) 21 { 22 ManagedFile file; 23 file.m_fileHandle.reset(CreateFileW(path.c_str(), desiredAccess, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr)); 24 THROW_LAST_ERROR_IF(!file.m_fileHandle); 25 file.m_filePath = path; 26 27 return file; 28 } 29 30 ManagedFile::~ManagedFile() 31 { 32 if (m_deleteFileOnExit) 33 { 34 if (m_fileHandle) 35 { 36 m_fileHandle.reset(); 37 } 38 39 try 40 { 41 std::filesystem::remove(m_filePath); 42 } 43 catch (...) 44 { 45 AICLI_LOG(Core, Info, << "Failed to remove managed file at: " << m_filePath); 46 } 47 } 48 } 49 }