2014-07-02 20:28:29 -04:00
|
|
|
#include "stdafx.h"
|
|
|
|
#include <commdlg.h>
|
|
|
|
#include <shlobj.h>
|
|
|
|
#include "FolderUtilities.h"
|
|
|
|
|
|
|
|
wstring FolderUtilities::GetHomeFolder()
|
|
|
|
{
|
|
|
|
wstring folder;
|
|
|
|
PWSTR pathName;
|
|
|
|
SHGetKnownFolderPath(FOLDERID_Documents, 0, nullptr, &pathName);
|
|
|
|
folder = wstring((wchar_t*)pathName) + L"\\NesEMU\\";
|
|
|
|
|
|
|
|
//Make sure it exists
|
|
|
|
CreateDirectory(folder.c_str(), nullptr);
|
|
|
|
|
|
|
|
CoTaskMemFree(pathName);
|
|
|
|
|
|
|
|
return folder;
|
|
|
|
}
|
|
|
|
|
|
|
|
wstring FolderUtilities::GetSaveFolder()
|
|
|
|
{
|
|
|
|
wstring folder = GetHomeFolder() + L"Saves\\";
|
|
|
|
CreateDirectory(folder.c_str(), nullptr);
|
|
|
|
return folder;
|
|
|
|
}
|
|
|
|
|
|
|
|
wstring FolderUtilities::GetSaveStateFolder()
|
|
|
|
{
|
|
|
|
wstring folder = GetHomeFolder() + L"SaveStates\\";
|
|
|
|
CreateDirectory(folder.c_str(), nullptr);
|
|
|
|
return folder;
|
|
|
|
}
|
|
|
|
|
|
|
|
wstring FolderUtilities::GetMovieFolder()
|
|
|
|
{
|
|
|
|
wstring folder = GetHomeFolder() + L"Movies\\";
|
|
|
|
CreateDirectory(folder.c_str(), nullptr);
|
|
|
|
return folder;
|
|
|
|
}
|
|
|
|
|
2014-07-10 21:17:37 -04:00
|
|
|
wstring FolderUtilities::GetScreenshotFolder()
|
|
|
|
{
|
|
|
|
wstring folder = GetHomeFolder() + L"Screenshots\\";
|
|
|
|
CreateDirectory(folder.c_str(), nullptr);
|
|
|
|
return folder;
|
|
|
|
}
|
|
|
|
|
2014-07-02 20:28:29 -04:00
|
|
|
vector<wstring> FolderUtilities::GetFolders(wstring rootFolder)
|
|
|
|
{
|
|
|
|
HANDLE hFind;
|
|
|
|
WIN32_FIND_DATA data;
|
|
|
|
|
|
|
|
vector<wstring> folders;
|
|
|
|
|
|
|
|
hFind = FindFirstFile((rootFolder + L"*").c_str(), &data);
|
|
|
|
if(hFind != INVALID_HANDLE_VALUE) {
|
|
|
|
do {
|
|
|
|
if(data.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY && wcscmp(data.cFileName, L".") != 0 && wcscmp(data.cFileName, L"..") != 0) {
|
|
|
|
wstring subfolder = rootFolder + data.cFileName + L"\\";
|
|
|
|
folders.push_back(subfolder);
|
|
|
|
for(wstring folderName : GetFolders(subfolder.c_str())) {
|
|
|
|
folders.push_back(folderName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
while(FindNextFile(hFind, &data));
|
|
|
|
FindClose(hFind);
|
|
|
|
}
|
|
|
|
|
|
|
|
return folders;
|
|
|
|
}
|
|
|
|
|
|
|
|
vector<wstring> FolderUtilities::GetFilesInFolder(wstring rootFolder, wstring mask, bool recursive)
|
|
|
|
{
|
|
|
|
HANDLE hFind;
|
|
|
|
WIN32_FIND_DATA data;
|
|
|
|
|
|
|
|
vector<wstring> folders;
|
|
|
|
vector<wstring> files;
|
2014-07-09 18:29:07 -04:00
|
|
|
if(rootFolder[rootFolder.size() - 1] != '/' && rootFolder[rootFolder.size() - 1] != '\\') {
|
|
|
|
rootFolder += L"/";
|
|
|
|
}
|
|
|
|
|
2014-07-02 20:28:29 -04:00
|
|
|
folders.push_back(rootFolder);
|
|
|
|
|
|
|
|
if(recursive) {
|
|
|
|
for(wstring subFolder : GetFolders(rootFolder)) {
|
|
|
|
folders.push_back(subFolder);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for(wstring folder : folders) {
|
|
|
|
hFind = FindFirstFile((folder + mask).c_str(), &data);
|
|
|
|
if(hFind != INVALID_HANDLE_VALUE) {
|
|
|
|
do {
|
|
|
|
files.push_back(folder + data.cFileName);
|
|
|
|
} while(FindNextFile(hFind, &data));
|
|
|
|
FindClose(hFind);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return files;
|
|
|
|
}
|
|
|
|
|
|
|
|
wstring FolderUtilities::GetFilename(wstring filepath, bool includeExtension)
|
|
|
|
{
|
|
|
|
int index = filepath.find_last_of(L"/\\");
|
|
|
|
wstring filename = (index == std::string::basic_string::npos) ? filepath : filepath.substr(index + 1);
|
|
|
|
if(!includeExtension) {
|
|
|
|
filename = filename.substr(0, filename.find_last_of(L"."));
|
|
|
|
}
|
|
|
|
return filename;
|
|
|
|
}
|
|
|
|
|
|
|
|
wstring FolderUtilities::GetFolderName(wstring filepath)
|
|
|
|
{
|
|
|
|
int index = filepath.find_last_of(L"/\\");
|
|
|
|
return filepath.substr(0, index);
|
|
|
|
}
|
|
|
|
|
|
|
|
wstring FolderUtilities::OpenFile(LPCWSTR filter, wstring defaultFolder, bool forSave, wstring defaultExt)
|
|
|
|
{
|
2014-07-03 18:14:42 -04:00
|
|
|
return OpenFile(filter, defaultFolder.c_str(), forSave, defaultExt.c_str());
|
2014-07-02 20:28:29 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
wstring FolderUtilities::OpenFile(LPCWSTR filter, LPCWSTR defaultFolder, bool forSave, LPCWSTR defaultExt)
|
|
|
|
{
|
|
|
|
wchar_t buffer[2000];
|
|
|
|
buffer[0] = '\0';
|
|
|
|
|
|
|
|
OPENFILENAME ofn;
|
|
|
|
ZeroMemory(&ofn, sizeof(ofn));
|
|
|
|
ofn.lStructSize = sizeof(ofn);
|
|
|
|
ofn.hwndOwner = nullptr;
|
|
|
|
ofn.lpstrDefExt = defaultExt;
|
|
|
|
ofn.lpstrFile = buffer;
|
|
|
|
ofn.nMaxFile = sizeof(buffer);
|
|
|
|
ofn.lpstrFilter = filter;
|
|
|
|
ofn.nFilterIndex = 1;
|
|
|
|
ofn.lpstrFileTitle = nullptr;
|
|
|
|
ofn.nMaxFileTitle = 0;
|
|
|
|
ofn.lpstrInitialDir = defaultFolder;
|
|
|
|
if(forSave) {
|
|
|
|
ofn.Flags = OFN_OVERWRITEPROMPT;
|
|
|
|
GetSaveFileName(&ofn);
|
|
|
|
} else {
|
|
|
|
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
|
|
|
|
GetOpenFileName(&ofn);
|
|
|
|
}
|
|
|
|
|
|
|
|
return wstring(buffer);
|
|
|
|
}
|