bool FStreamingNetworkPlatformFile::IterateDirectoryRecursively(const TCHAR* InDirectory, IPlatformFile::FDirectoryVisitor& Visitor) { FString RelativeDirectory = InDirectory; MakeStandardNetworkFilename(RelativeDirectory); // we loop until this is false bool RetVal = true; // loop over the server TOC for (TMap<FString, FServerTOC::FDirectory*>::TIterator DirIt(ServerFiles.Directories); DirIt && RetVal == true; ++DirIt) { if (DirIt.Key().StartsWith(RelativeDirectory)) { FServerTOC::FDirectory& ServerDirectory = *DirIt.Value(); // loop over the server files and look if they are in this exact directory for (FServerTOC::FDirectory::TIterator It(ServerDirectory); It && RetVal == true; ++It) { // timestamps of 0 mean directories bool bIsDirectory = It.Value() == 0; // visit! RetVal = Visitor.Visit(*It.Key(), bIsDirectory); } } } return RetVal; }
bool FStreamingNetworkPlatformFile::IterateDirectory(const TCHAR* InDirectory, IPlatformFile::FDirectoryVisitor& Visitor) { FString RelativeDirectory = InDirectory; MakeStandardNetworkFilename(RelativeDirectory); // for .dll, etc searches that don't specify a path, we need to strip off the path // before we send it to the visitor bool bHadNoPath = InDirectory[0] == 0; // we loop until this is false bool RetVal = true; // Find the directory in TOC FServerTOC::FDirectory* ServerDirectory = ServerFiles.FindDirectory(RelativeDirectory); if (ServerDirectory != nullptr) { // loop over the server files and look if they are in this exact directory for (FServerTOC::FDirectory::TIterator It(*ServerDirectory); It && RetVal == true; ++It) { if (FPaths::GetPath(It.Key()) == RelativeDirectory) { // timestamps of 0 mean directories bool bIsDirectory = It.Value() == 0; // visit (stripping off the path if needed) RetVal = Visitor.Visit(bHadNoPath ? *FPaths::GetCleanFilename(It.Key()) : *It.Key(), bIsDirectory); } } } return RetVal; }
bool FNetworkPlatformFile::IterateDirectory(const TCHAR* InDirectory, IPlatformFile::FDirectoryVisitor& Visitor) { // FScopeLock ScopeLock(&SynchronizationObject); // for .dll, etc searches that don't specify a path, we need to strip off the path // before we send it to the visitor bool bHadNoPath = InDirectory[0] == 0; // local files go right to the source FString RelativeDirectory = InDirectory; FPaths::MakeStandardFilename(RelativeDirectory); if (IsInLocalDirectory(RelativeDirectory)) { return InnerPlatformFile->IterateDirectory(InDirectory, Visitor); } // we loop until this is false bool RetVal = true; FServerTOC::FDirectory* ServerDirectory = ServerFiles.FindDirectory(RelativeDirectory); if (ServerDirectory != NULL) { // loop over the server files and look if they are in this exact directory for (FServerTOC::FDirectory::TIterator It(*ServerDirectory); It && RetVal == true; ++It) { if (FPaths::GetPath(It.Key()) == RelativeDirectory) { // timestamps of 0 mean directories bool bIsDirectory = It.Value() == 0; // visit (stripping off the path if needed) RetVal = Visitor.Visit(bHadNoPath ? *FPaths::GetCleanFilename(It.Key()) : *It.Key(), bIsDirectory); } } } return RetVal; }
bool FNetworkPlatformFile::IterateDirectoryRecursively(const TCHAR* InDirectory, IPlatformFile::FDirectoryVisitor& Visitor) { // FScopeLock ScopeLock(&SynchronizationObject); // local files go right to the source FString RelativeDirectory = InDirectory; FPaths::MakeStandardFilename(RelativeDirectory); if (IsInLocalDirectory(RelativeDirectory)) { return InnerPlatformFile->IterateDirectoryRecursively(InDirectory, Visitor); } // we loop until this is false bool RetVal = true; for (TMap<FString, FServerTOC::FDirectory*>::TIterator DirIt(ServerFiles.Directories); DirIt && RetVal == true; ++DirIt) { if (DirIt.Key().StartsWith(RelativeDirectory)) { FServerTOC::FDirectory& ServerDirectory = *DirIt.Value(); // loop over the server files and look if they are in this exact directory for (FServerTOC::FDirectory::TIterator It(ServerDirectory); It && RetVal == true; ++It) { // timestamps of 0 mean directories bool bIsDirectory = It.Value() == 0; // visit! RetVal = Visitor.Visit(*It.Key(), bIsDirectory); } } } return RetVal; }