【问题标题】:Move and automatically rename(customized) a file移动并自动重命名(自定义)文件
【发布时间】:2012-09-13 13:57:35
【问题描述】:

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

等等……

寻求您的建议。

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

}

【问题讨论】:

  • 您想将代码添加到问题中吗?
  • 首先我不明白'-'投票。什么的代码?我要求提供代码建议!
  • 这不是 Stack Overflow 的工作方式。如果您对代码有特定疑问或问题,我们很乐意为您提供帮助。你的问题读起来很像“请有人为我写这个”
  • 感谢您添加代码。我已经添加了答案。
  • 这不是你学习编程的教室。在提出问题之前,您需要做两件事: 1. 阅读手册,如果您在其中找不到所需的内容 2. 问问自己您要问的是实际问题还是您无法解决它。对不起,如果我看起来有点苛刻,但在要求这里的人花时间解决像这样的一个非常基本的问题之前,你必须努力寻找解决方案。

标签: php fuelphp


【解决方案1】:

我认为这应该可以满足您的需求。

它会检查文件是否存在于您的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);
    }
}

【讨论】:

  • 嗯,它并不完全有效。哇?因为,第一次来自 opta 存档的文件的名称是 file.ext。您的脚本移动 fantomic_archive 中的文件,并将其(第一次)重命名为 1_file.ext。然后我在 opta_archive 中收到一个新文件,命名为第一个文件 file.ext,而这一次,脚本没有完成这项工作。
  • 不过,您应该能够弄清楚如何调试它
  • 是的,从这里开始就好了,谢谢。
【解决方案2】:

根据“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); }

}

【讨论】:

    猜你喜欢
    • 2011-03-20
    • 2012-12-26
    • 1970-01-01
    • 2013-06-27
    • 2017-01-05
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多