-4

我需要将文件从路径 ($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

等等 ...

寻找你的建议。

PS如果你有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);
}

}
4

2 回答 2

0

根据“andrewsi”提供的想法,最终的解决方案是:

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

foreach ($fresh_files 作为 $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); }

}

于 2012-09-13T14:47:54.703 回答
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);
    }
}
于 2012-09-13T14:12:31.137 回答