General developer forum

File API - how do you *move* a file?

Re: File API - how do you *move* a file?
Core developersParticularly helpful MoodlersPlugin developers

Using the $fs->create_file_from_storedfile() function ( ).

Assuming $file is the file you want to move and $fs is initialised by get_file_storage();

$dest = array('filearea' => 'destination_area'); // You can also include contextid, component, etc. here, if you want to.

$fs->create_file_from_storedfile($dest, $file);


Due to the efficient storage of the data, the file on  the disk is never actually copied, just a new database record created and the old one deleted.

Average of ratings: -
Picture of Howard Miller
Re: File API - how do you *move* a file?
Core developersDocumentation writersParticularly helpful MoodlersPlugin developers

Thanks! I actually got there just before you posted. What was tripping me up was that 'create_file_from_storedfile() fails if the destination file already exists. This sounds obvious now but wasn't what I expected and one tends to run the same thing multiple times during testing. 

So... to be on the safe side, an $fs->get_file(...) with the same details as $dest (unfortunately it won't accept the same array -booh) followed by a delete if it succeeds. 

Average of ratings: -