1
0
This commit is contained in:
Scott E. Graves
2017-04-12 18:29:10 -05:00
parent 74437dde15
commit 43f62e01c8
2 changed files with 15 additions and 9 deletions

View File

@@ -74,6 +74,8 @@ std::vector<SString> CSiaApi::_CSiaFileTree::QueryDirectories(SString rootFolder
auto fileList = GetFileList(); auto fileList = GetFileList();
CSiaFileCollection col; CSiaFileCollection col;
rootFolder.Replace("/", "\\"); rootFolder.Replace("/", "\\");
if (!rootFolder.BeginsWith('\\'))
rootFolder = '\\' + rootFolder;
std::vector<SString> ret; std::vector<SString> ret;
std::for_each(fileList->begin(), fileList->end(), [&](const CSiaFilePtr& v) std::for_each(fileList->begin(), fileList->end(), [&](const CSiaFilePtr& v)
@@ -81,7 +83,7 @@ std::vector<SString> CSiaApi::_CSiaFileTree::QueryDirectories(SString rootFolder
SString path = ("\\" + FilePath(v->GetSiaPath()).RemoveFileName()).Replace("/", "\\"); SString path = ("\\" + FilePath(v->GetSiaPath()).RemoveFileName()).Replace("/", "\\");
if (path.BeginsWith(rootFolder)) if (path.BeginsWith(rootFolder))
{ {
path = (rootFolder == "\\") ? path.SubString(1) : path.SubString(1, rootFolder.Length()); path = (rootFolder == "\\") ? path.SubString(1) : path.SubString(rootFolder.Length() + 1);
if (path.Length()) if (path.Length())
{ {
auto splitPaths = path.Split('\\'); auto splitPaths = path.Split('\\');

View File

@@ -1471,6 +1471,13 @@ private:
} }
} }
} }
else if (createDisposition == OPEN_EXISTING)
{
if (!cacheFilePath.IsDirectory())
{
ret = STATUS_NOT_FOUND;
}
}
if (ret == STATUS_SUCCESS) if (ret == STATUS_SUCCESS)
{ {
@@ -1715,8 +1722,8 @@ private:
findFile.Append(fileName); findFile.Append(fileName);
if (dokanFileInfo->IsDirectory) if (dokanFileInfo->IsDirectory)
{ {
siaDirQuery = siaFileQuery;
siaFileQuery += L"/*.*"; siaFileQuery += L"/*.*";
siaDirQuery = findFile;
findFile.Append("*"); findFile.Append("*");
} }
} }
@@ -2272,7 +2279,7 @@ private:
// if open with FILE_FLAG_DELETE_ON_CLOSE // if open with FILE_FLAG_DELETE_ON_CLOSE
if (dokanFileInfo->IsDirectory) if (dokanFileInfo->IsDirectory)
{ {
filePath.RemoveDirectory(); while (!filePath.RemoveDirectory());
} }
else else
{ {
@@ -2337,13 +2344,10 @@ private:
} }
} }
while ((ret == STATUS_SUCCESS) && (::FindNextFile(findHandle, &findData) != 0)); while ((ret == STATUS_SUCCESS) && (::FindNextFile(findHandle, &findData) != 0));
if (ret != STATUS_DIRECTORY_NOT_EMPTY) DWORD error = ::GetLastError();
if ((ret != STATUS_DIRECTORY_NOT_EMPTY) && (error != ERROR_NO_MORE_FILES))
{ {
DWORD error = ::GetLastError(); ret = DokanNtStatusFromWin32(error);
if (error != ERROR_NO_MORE_FILES)
{
ret = DokanNtStatusFromWin32(error);
}
} }
::FindClose(findHandle); ::FindClose(findHandle);