commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kathrin Leufke (JIRA)" <>
Subject [jira] Created: (VFS-229) The moveTo() method of the AbstractFileObject class doesn't work correct on Linux
Date Fri, 12 Dec 2008 11:45:44 GMT
The moveTo() method of the AbstractFileObject class doesn't work correct on Linux

                 Key: VFS-229
             Project: Commons VFS
          Issue Type: Bug
    Affects Versions: 1.0
         Environment: Linux, two files on different mounts
            Reporter: Kathrin Leufke


i used the moveTo() method of the AbstractFileObject class to move one file (for example)
from file:///media/filedir1/test.tif to file:///media/filedir2/test.tif.

Filedir1 and filedir2 are different mounts. The canRenameTo() method returns true (= same
filesystem) and the doRename() of the LocalFile class throws an error because rename failed:
Could not rename "file:///media/filedir1/test.tif" to "file:///media/filedir2/test.tif".
Because of the different mounts a copy/delete is required.

I solved the problem for myself by surrounding just the doRename() call of the moveTo() method
with try/catch and in case of an exception I try to copy/delete.

    public void moveTo(FileObject destFile) throws FileSystemException

        if (canRenameTo(destFile))
            // issue rename on same filesystem
                // TODO changed code     
                boolean bDoRename = false;
                try // just catch exceptions from doRename
                	bDoRename = true;
                catch(Exception e)
                	// rename failed, try copy/delete (code from else)
	                destFile.close(); // now the destFile is no longer imaginary. force reattach.
	                handleDelete(); // fire delete-events. This file-object (src) is like deleted.
                // TODO ends
            catch (final RuntimeException re)
                throw re;
            catch (final Exception exc)
                throw new FileSystemException("vfs.provider/rename.error", new Object[]
                    }, exc);
            // different fs - do the copy/delete stuff
            // TODO change code, extract copy/delete method
            copyDelete(destFile); }


	private void copyDelete(FileObject destFile) throws FileSystemException
		destFile.copyFrom(this, Selectors.SELECT_SELF);

		if (((destFile.getType().hasContent() && destFile.getFileSystem().hasCapability(Capability.SET_LAST_MODIFIED_FILE))
		    (destFile.getType().hasChildren() && destFile.getFileSystem().hasCapability(Capability.SET_LAST_MODIFIED_FOLDER)))


This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message