我想在现有文件的文件夹中创建一个新文件,这些文件的名称按数字顺序排列,例如。 1, 2, 3, 4...
我想检查最后一个 nr 是什么,然后用一个 nr 覆盖那个创建一个文件。
我知道我应该使用 file_exists 但我不知道如何使用它,也许在 for 循环中?但是如何呢?
如果有人能给我提示就太好了
最佳答案
我认为这是您最好的选择(请参阅 revisions 了解以前的版本):
$files = glob('/path/to/dir/*'); // get all files in folder
natsort($files); // sort
$lastFile = pathinfo(array_pop($files)); // split $lastFile into parts
$newFile = $lastFile['filename'] +1; // increase filename by 1
if(file_exists("/path/to/dir/$newFile")) { // do not write file if it exists
die("$newFile aready exists");
}
file_put_contents("/path/to/dir/$newFile", 'stuff'); // write new file
只要您文件夹中的文件名以数字开头,这应该始终写入最高编号的文件名加一,例如
1,5,10 => writes file 11
1.txt, 5.gif, 10.jpg => writes file 11
1, 5.txt, 10_apple.txt => writes file 11
如果有一个不是以数字开头的文件,上述方法将不起作用,因为数字在字符之前排序,因此不会为例如写入任何内容
1,5,10,foo => foo+1 equals 1, already exists, nothing written
您可以通过将 glob 的模式更改为 /path/[0-9]*
来解决此问题,这将只匹配以数字开头的文件。那应该非常可靠。
注意 natsort
在不同的操作系统上表现不同。以上在我的 Windows 机器上运行良好,但您需要检查生成的排序顺序以使其适用于您的特定机器。
有关如何使用 glob()
的更多信息,请参阅手册, natsort()
和 pathinfo()
;
关于php - 根据文件夹中已存在的名称创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2077147/