CLOUD: Make download() create necessary directories
DumpFile::open() with createPath=true create would create the missing directories from the path before opening a file. Thus, one can easily create a file and avoid "can't open a file" error.
This commit is contained in:
parent
d014b5bf38
commit
ae8e7f39f5
8 changed files with 87 additions and 6 deletions
|
@ -244,4 +244,36 @@ Common::WriteStream *WindowsFilesystemNode::createWriteStream() {
|
|||
return StdioStream::makeFromPath(getPath(), true);
|
||||
}
|
||||
|
||||
bool WindowsFilesystemNode::create(bool isDirectory) {
|
||||
bool success;
|
||||
|
||||
if (isDirectory) {
|
||||
success = CreateDirectory(toUnicode(_path.c_str()), NULL) != 0;
|
||||
} else {
|
||||
success = CreateFile(toUnicode(_path.c_str()), GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) != INVALID_HANDLE_VALUE;
|
||||
}
|
||||
|
||||
if (success) {
|
||||
//this piece is copied from constructor, it checks that file exists and detects whether it's a directory
|
||||
DWORD fileAttribs = GetFileAttributes(toUnicode(_path.c_str()));
|
||||
if (fileAttribs != INVALID_FILE_ATTRIBUTES) {
|
||||
_isDirectory = ((fileAttribs & FILE_ATTRIBUTE_DIRECTORY) != 0);
|
||||
_isValid = true;
|
||||
// Add a trailing slash, if necessary.
|
||||
if (_isDirectory && _path.lastChar() != '\\') {
|
||||
_path += '\\';
|
||||
}
|
||||
|
||||
if (_isDirectory != isDirectory) warning("failed to create %s: got %s", isDirectory ? "directory" : "file", _isDirectory ? "directory" : "file");
|
||||
return _isDirectory == isDirectory;
|
||||
}
|
||||
|
||||
warning("WindowsFilesystemNode: Create%s() was a success, but GetFileAttributes() indicates there is no such %s",
|
||||
isDirectory ? "Directory" : "File", isDirectory ? "directory" : "file");
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif //#ifdef WIN32
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue