klasöründe zaten var ne dayalı adı ile dosya oluşturmak

3 Cevap

i bir sayısal sırada örneğin adlarıyla mevcut dosyaları ile bir klasörde yeni bir dosya oluşturmak istiyor. 1, 2, 3, 4 ...

i son nr ne olduğunu kontrol edin ve o birinin üzerinde bir nr ile bir dosya oluşturmak istiyor.

i file_exists kullanmanız gerektiğini biliyorum ama belki döngü için i, kullanmak için tam olarak nasıl bilmiyorum? ama nasıl?

Birisi bana bir ipucu verebilir güzel olurdu

3 Cevap

Ben bu (see revisions önceki sürümleri için ), en iyi bahis olduğunu düşünüyorum:

$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    

Sürece klasöründe dosya isimleri numaraları ile başlamak gibi, bu her zaman, örneğin, bir artırılır yüksek numaralı dosya yazmak gerekir

1,5,10                  => writes file 11
1.txt, 5.gif, 10.jpg    => writes file 11
1, 5.txt, 10_apple.txt  => writes file 11

not bir sayı ile başlayan bir dosya varsa, sayılar karakterden önce sıralanır çünkü yukarıdaki yaklaşım, çalışmaz ve dolayısıyla hiçbir şey örn için yazılmış olacaktır

1,5,10,foo => foo+1 equals 1, already exists, nothing written

Daha sonra sadece bir sayı ile başlayan dosyaları maç olacak /path/[0-9]* için topak için desen, değiştirerek bu sorunun üstesinden gelebilirsiniz. O zaman oldukça sağlam olmalıdır.

Note natsort, farklı işletim sistemi üzerinde farklı davranır. Yukarıdaki eserler benim Windows makinede ince, ancak bunun belirli bir makine için çalışma almak için çıkan sıralama düzenini kontrol etmek isteyecektir.

glob() , natsort() and pathinfo() nasıl kullanılacağı hakkında daha fazla bilgi için kılavuzuna bakın;

Belki böyle?

$name = 'filename';
$ext = '.txt';
$i = 1;
$tmpname = $name . $ext;
while(file_exists($tmpname)) {
  $i++;
  $tmpname = $name . $i . $ext;
}

// $tmpname will be a unique filename by now

tek yönlü. dosya isimleri 1.TXT hayal 2.txt vb

$dir = "/path";
chdir($dir);
$files = glob("[0-9]*.txt");
print "Files aftering globbing: ";
print_r($files);
sort($files,SORT_NUMERIC);
print "After sorting using numeric sort: ";
print_r($files);
# get latest file
$newest=end($files);
$s=explode(".",$newest);
$s[0]=$s[0]+1;
$newname=$s[0].".txt";
touch($newname);

çıktı

$ ls *txt
10.txt  11.txt  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt

$ php test.php
Files aftering globbing: Array
(
    [0] => 1.txt
    [1] => 10.txt
    [2] => 11.txt
    [3] => 2.txt
    [4] => 3.txt
    [5] => 4.txt
    [6] => 5.txt
    [7] => 6.txt
    [8] => 7.txt
    [9] => 8.txt
    [10] => 9.txt
)
After sorting using numeric sort: Array
(
    [0] => 1.txt
    [1] => 2.txt
    [2] => 3.txt
    [3] => 4.txt
    [4] => 5.txt
    [5] => 6.txt
    [6] => 7.txt
    [7] => 8.txt
    [8] => 9.txt
    [9] => 10.txt
    [10] => 11.txt
)

$ ls *.txt
10.txt  11.txt  **12.txt**  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt