Ejemplo n.º 1
0
/** Copies this file or directory to the specified file or directory. If this handle is a file, then 1) if the destination is a
* file, it is overwritten, or 2) if the destination is a directory, this file is copied into it, or 3) if the destination
* doesn't exist, {@link #mkdirs()} is called on the destination's parent and this file is copied into it with a new name. If
* this handle is a directory, then 1) if the destination is a file, GdxRuntimeException is thrown, or 2) if the destination is
* a directory, this directory is copied recursively into it as a subdirectory, overwriting existing files, or 3) if the
* destination doesn't exist, {@link #mkdirs()} is called on the destination and this directory is copied recursively into it
* as a subdirectory.
* @throw GdxRuntimeException if the destination file handle is a {@link FileType#Classpath} or {@link FileType#Internal} file,
*        or copying failed. */
void FileHandle::copyTo(const FileHandle& destination) const
{
	/*
	boolean sourceDir = isDirectory();
	if (!sourceDir) {
	if (dest.isDirectory()) dest = dest.child(name());
	copyFile(this, dest);
	return;
	}
	if (dest.exists()) {
	if (!dest.isDirectory()) throw GdxRuntimeException("Destination exists but is not a directory: " + dest);
	} else {
	dest.mkdirs();
	if (!dest.isDirectory()) throw GdxRuntimeException("Destination directory cannot be created: " + dest);
	}
	if (!sourceDir) dest = dest.child(name());
	copyDirectory(this, dest);
	*/
	FileHandle dest = destination;
	bool sourceIsDir = isDirectory();
	if (!sourceIsDir) 
	{
		if (dest.isDirectory()) 
		{
			dest = dest.child(name());
		}
		copyFile(*this, dest);
		return;
	}

	if (dest.exists()) 
	{
		if (!dest.isDirectory()) 
			throw GdxRuntimeException("Destination exists but is not a directory: " + dest.toString());
	} 
	else 
	{
		dest.mkdirs();
		if (!dest.isDirectory()) 
			throw GdxRuntimeException("Destination directory cannot be created: " + dest.toString());
	}

	if (!sourceIsDir)
	{
		dest = dest.child(name());
	}
	copyDirectory(*this, dest);
}
Ejemplo n.º 2
0
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());
	}
}