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

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

por Davo Smith -
Número de respostas: 1
Imagem de Core developers Imagem de Particularly helpful Moodlers Imagem de Peer reviewers Imagem de 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.

Em resposta à Davo Smith

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

por Howard Miller -
Imagem de Core developers Imagem de Documentation writers Imagem de Particularly helpful Moodlers Imagem de Peer reviewers Imagem de 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.