Browse Source

Some FileSystem additions

Josh Engebretson 11 years ago
parent
commit
b3b2d22409
2 changed files with 51 additions and 1 deletions
  1. 47 1
      Source/Atomic/IO/FileSystem.cpp
  2. 4 0
      Source/Atomic/IO/FileSystem.h

+ 47 - 1
Source/Atomic/IO/FileSystem.cpp

@@ -759,7 +759,6 @@ void Java_com_github_atomic_Atomic_nativeSetAssetManager(JNIEnv *env, jobject th
 
 }
 
-
 // TODO: AAssetManager_openDir doesn't support subdirectories :/ 
 
 void FileSystem::ScanDirInternal(Vector<String>& result, String path, const String& startPath,
@@ -895,6 +894,53 @@ void FileSystem::ScanDirInternal(Vector<String>& result, String path, const Stri
 
 #endif
 
+bool FileSystem::CreateDirsRecursive(const String& directoryIn, const String& directoryOut)
+{
+    if (!CreateDir(directoryOut))
+        return false;
+
+    Vector<String> results;
+    ScanDir(results, directoryIn, "*", SCAN_DIRS, false );
+
+    while (results.Remove(".")) {}
+    while (results.Remove("..")) {}
+
+    for (unsigned i = 0; i < results.Size(); i++)
+    {
+        String dirIn = directoryIn + "/" + results[i];
+        String dirOut = directoryOut + "/" + results[i];
+
+        //LOGINFOF("SRC: %s, DST: %s", dirIn.CString(), dirOut.CString());
+
+        if (!CreateDirsRecursive(dirIn, dirOut))
+            return false;
+    }
+
+    return true;
+}
+
+bool FileSystem::CopyDir(const String& directoryIn, const String& directoryOut)
+{
+    if (FileExists(directoryOut) || DirExists(directoryOut))
+        return false;
+
+    CreateDirsRecursive(directoryIn, directoryOut);
+
+    Vector<String> results;
+    ScanDir(results, directoryIn, "*", SCAN_FILES, true );
+
+    for (unsigned i = 0; i < results.Size(); i++)
+    {
+        String srcFile = directoryIn + "/" + results[i];
+        String dstFile = directoryOut + "/" + results[i];
+        //LOGINFOF("SRC: %s DST: %s", srcFile.CString(), dstFile.CString());
+        Copy(srcFile, dstFile);
+    }
+
+    return true;
+
+}
+
 bool FileSystem::RemoveDir(const String& directoryIn, bool recursive)
 {
     String directory = AddTrailingSlash(directoryIn);

+ 4 - 0
Source/Atomic/IO/FileSystem.h

@@ -100,7 +100,11 @@ public:
     String GetAppPreferencesDir(const String& org, const String& app) const;
 
     String GetAppBundleResourceFolder();
+    /// Remove a directory
     bool RemoveDir(const String& directoryIn, bool recursive);
+    bool CreateDirsRecursive(const String& directoryIn, const String& directoryOut);
+    /// Copy a directory, directoryOut must not exist
+    bool CopyDir(const String& directoryIn, const String& directoryOut);
     
 private:
     /// Scan directory, called internally.