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

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

Davo Smith -
Number of replies: 1
Pikitia o Core developers Pikitia o Particularly helpful Moodlers Pikitia o Peer reviewers Pikitia o Plugin developers

Using the $fs->create_file_from_storedfile() function ( https://github.com/moodle/moodle/blob/master/lib/filestorage/file_storage.php#l950 ).

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);

$file->delete();

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.

Ngā whakawākanga toharite: -
In reply to Davo Smith

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

Howard Miller -
Pikitia o Core developers Pikitia o Documentation writers Pikitia o Particularly helpful Moodlers Pikitia o Peer reviewers Pikitia o Plugin 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. 

Ngā whakawākanga toharite: -