移动并自动重命名(自定义)文件

时间:2012-09-13 13:57:36

标签: php fuelphp

我需要将文件从路径($ old_path)移动到另一个路径($ new_path)。

在将文件移动到$ new_path之前,我必须检查是否已经有一个内部具有相同“filename.ext”的文件。

如果我不这样做,   我只是将文件从$ old_path移动到$ new_path, 其他   我有一个同名的文件,我想先用1_重命名新文件,所以新文件将是'1_filename.ext'

然后我收到另一个文件,我再次检查$ new_path中是否存在'filename.ext'。

我必须重命名该文件,但这次我不能将其重命名为'1_filename.ext',因为已经存在一个具有此名称的文件。

请记住我想要做的事情,如何自动创建新文件名,每次生成最后一个filename.ext + 1作为前缀?

如果$ new-path为空,则第一个文件为filename.ext

第二次,我将(自动)将新文件重命名为1_filename.ext

第三次,我将(自动)将新文件重命名为2_filename.ext

依旧......

寻找你的建议。

P.S。如果你有适合FuelPHP的东西,它会很棒,否则......普通的PHP就好了!

直到现在我才这样做:

$fresh_files = File::read_dir(DOCROOT . DS . 'opta_archive');

foreach ($fresh_files as $fresh_file) 
{

$file_name = basename($fresh_file, '.xml');

if (file_exists(DOCROOT.DS.'fantomic_archive'.DS.$file_name))
{
    //create a new unique name for the new file
    //and then move it in our archive folder

}
else
{
    //move the file in our archive folder
    File::rename(DOCROOT.DS.'opta_archive'.DS.$fresh_file, DOCROOT.DS.'fantomic_archive'.DS.$fresh_file);
}

}

2 个答案:

答案 0 :(得分:0)

我认为这应该做你想要的。

检查fantomic_archive文件夹中是否存在该文件;如果没有,它只是移动文件。

否则,它会经历一个循环 - 它会在文件名的开头添加一个数字,并检查该数字是否存在。只要它生成一个唯一的文件名,它就会将文件重命名为该文件。

$fresh_files = File::read_dir(DOCROOT . DS . 'opta_archive');

foreach ($fresh_files as $fresh_file) {
    $file_name = basename($fresh_file, '.xml');

    if (! file_exists(DOCROOT.DS.'fantomic_archive'.DS.$file_name)) {
        //create a new unique name for the new file
        //and then move it in our archive folder

    File::rename(DOCROOT.DS.'opta_archive'.DS.$fresh_file, DOCROOT.DS.'fantomic_archive'.DS.$fresh_file);
    } else {
        $count = 1;
        while (file_exists(DOCROOT.DS.'fantomic_archive'.DS.$count . "_" . $file_name)) {
            $count++;
        }
        File::rename(DOCROOT.DS.'opta_archive'.DS.$fresh_file, DOCROOT.DS.'fantomic_archive'.DS.$count . "_" . $fresh_file);
    }
}

答案 1 :(得分:0)

基于'andrewsi'提供的ideea,最终的解决方案是:

$fresh_files = File::read_dir(DOCROOT . DS . 'opta_archive');

foreach ($fresh_files as $fresh_file) { $file_name = basename($fresh_file);

$count = 1; if (file_exists(DOCROOT.DS.'fantomic_archive'.DS.$count . "_" . $file_name)) { $count++; File::rename(DOCROOT.DS.'opta_archive'.DS.$fresh_file, DOCROOT.DS.'fantomic_archive'.DS.$count . "_" . $file_name); } else { File::rename(DOCROOT.DS.'opta_archive'.DS.$fresh_file, DOCROOT.DS.'fantomic_archive'.DS.$count . "_" . $file_name); }

}