gdx_cpp::files::FileHandle& TileAtlas::getRelativeFileHandle (const gdx_cpp::files::FileHandle& path,const std::string& relativePath) { if (relativePath.trim().length() == 0) { return path; } FileHandle child = path; StringTokenizer tokenizer = new StringTokenizer(relativePath, "\\/"); while (tokenizer.hasMoreTokens()) { String token = tokenizer.nextToken(); if (token.equals("..")) { child = child.parent(); } else { child = child.child(token); } } return child; }
void FileHandle::copyFile(const FileHandle& source, const FileHandle& dest) { dest.parent().mkdirs(); if(!Gdx.files->copyFile(source.m_strFullPath.c_str(), dest.m_strFullPath.c_str())) throw GdxRuntimeException("failed to copy " + source.m_strFullPath + " to " + dest.m_strFullPath); }
void FilesTest::create() { font = new BitmapFont(); batch = new SpriteBatch(); if(Gdx.files->isExternalStorageAvailable()) { message += "External storage available\n"; std::string externalStoragePath; Gdx.files->getExternalStoragePath(externalStoragePath); message += "External storage path: " + externalStoragePath + "\n"; try { FileHandle cube = Gdx.files->internalHandle("data/cube.obj"); std::ifstream in; cube.read(in); try { in.close(); } catch(std::exception e) { } message += "Open internal success\n"; } catch(std::exception e) { message += "Couldn't open internal data/cube.obj\n"; message += e.what(); message += "\n"; } try { FileHandle testFile = Gdx.files->externalHandle("test.txt"); std::ofstream testStream; testFile.write(false, testStream); testStream << "test"; testStream.close(); message += "Write external success\n"; } catch(GdxRuntimeException ex) { message += "Couldn't open externalstorage/test.txt\n"; } catch(std::exception e) { message += "Couldn't write externalstorage/test.txt\n"; } try { FileHandle testFile = Gdx.files->externalHandle("test.txt"); std::ifstream in; testFile.read(in); in.close(); message += "Open external success\n"; } catch(GdxRuntimeException e) { message += "Couldn't open internal externalstorage/test.txt\n"; } FileHandle file = Gdx.files->externalHandle("test.txt"); if(!file.remove()) { message += "Couldn't delete externalstorage/test.txt"; } file = Gdx.files->externalHandle("this/is/a/test"); file.mkdirs(); file.remove(); if(!file.parent().remove()) message += "failed to remove this/is/a/ directory"; if(!file.parent().parent().parent().removeRecursive()) message += "failed to remove this directory"; } else { message += "External storage not available"; } FileHandle tmp = FileHandle::tempFile(); tmp.length(); message += "Temp file created: " + tmp.toString() + "\n"; tmp.remove(); tmp = FileHandle::tempDirectory(); if(!tmp.isDirectory()) fail(); message += "Temp directory created: " + tmp.toString() + "\n"; tmp.remove(); try { testInternal(); testExternal(); testAbsolute(); } catch(std::exception ex) { throw GdxRuntimeException(ex.what()); } }
void FilesTest::testAbsolute() { std::string path; Gdx.files->getExternalStoragePath(path); path += "/meow"; FileHandle handle = Gdx.files->absoluteHandle(path); handle.remove(); if(handle.exists()) fail(); if(handle.isDirectory()) fail(); if(handle.remove()) fail(); std::vector<FileHandle> handles; handle.list(handles); if(handles.size() != 0) fail(); if(handle.child("meow").exists()) fail(); if(!handle.parent().exists()) fail(); try { std::ifstream in; handle.read(in); in.close(); fail(); } catch(GdxRuntimeException ignored) { } handle.mkdirs(); if(!handle.exists()) fail(); if(!handle.isDirectory()) fail(); handle.list(handles); if(handles.size() != 0) fail(); handle.child("meow").mkdirs(); handle.list(handles); if(handles.size() != 1) fail(); FileHandle child = handles[0]; if(child.name() != "meow") fail(); if(!child.parent().exists()) fail(); if(!handle.removeRecursive()) fail(); if(handle.exists()) fail(); std::ofstream output; handle.write(false, output); output << "moo"; output.close(); if(!handle.exists()) fail(); if(handle.length() != 3) fail(); FileHandle copy = Gdx.files->absoluteHandle(path + "-copy"); copy.remove(); if(copy.exists()) fail(); handle.copyTo(copy); if(!copy.exists()) fail(); if(copy.length() != 3) fail(); FileHandle move = Gdx.files->absoluteHandle(path + "-move"); move.remove(); if(move.exists()) fail(); copy.moveTo(move); if(!move.exists()) fail(); if(move.length() != 3) fail(); move.removeRecursive(); if(move.exists()) fail(); std::ifstream input; handle.read(input); char bytes[7]; input.read(bytes, 3); bytes[3] = 0; if(strcmp("moo", bytes)) fail(); input.close(); handle.write(true, output); output << "cow"; output.close(); if(handle.length() != 6) fail(); handle.readBytes((unsigned char*)bytes, 6); bytes[6] = 0; if(strcmp("moocow", bytes)) fail(); if(handle.isDirectory()) fail(); std::vector<FileHandle> files; handle.list(files); if(files.size() != 0) fail(); if(handle.name() != "meow") fail(); if(handle.nameWithoutExtension() != "meow") fail(); if(handle.extension() != "") fail(); handle.remove(); if(handle.exists()) fail(); if(handle.isDirectory()) fail(); handle.remove(); handle.removeRecursive(); }
void FilesTest::testInternal() { FileHandle handle = Gdx.files->internalHandle("data/badlogic.jpg"); if(!handle.exists()) fail(); if(handle.isDirectory()) fail(); try { handle.remove(); fail(); } catch(GdxRuntimeException expected) { } std::vector<FileHandle> files; handle.list(files); if(files.size() != 0) fail(); if(!handle.parent().exists()) fail(); try { std::ifstream input; handle.read(input); input.close(); //TODO: why??? fail(); } catch(GdxRuntimeException ignored) { } FileHandle dir; dir = Gdx.files->internalHandle("data"); if(!dir.exists()) fail(); if(!dir.isDirectory()) fail(); dir.list(files); if(files.size() == 0) fail(); FileHandle child = dir.child("badlogic.jpg"); if(child.name() != "badlogic.jpg") fail(); if(child.nameWithoutExtension() != "badlogic") fail(); if(child.extension() != "jpg") fail(); if(!child.parent().exists()) fail(); FileHandle copy = Gdx.files->externalHandle("badlogic.jpg-copy"); copy.remove(); if(copy.exists()) fail(); handle.copyTo(copy); if(!copy.exists()) fail(); if(copy.length() != 68465) fail(); copy.remove(); if(copy.exists()) fail(); }