2012-10-25 116 views
0

如果一個目錄不存在,我創建目錄並保存一個文件,如果該目錄存在,我也可以保存文件。一次創建一個文件的時間不應與下面的代碼同時生成。如果現在創建第一個文件,那麼只有在調用該函數時纔會創建下一個文件。這些文件被命名爲R1,R2 .... Rn。我怎樣才能做到這一點,這造成他們都在同一時間如果第一條語句存在,執行第二條語句

$fileName1=$fileName1='somedir/'.$thedir.'/'.$thefile.'_R1.xlsx'; 

... 

if (!dir($dirName)) 
{ 
    mkdir('somedir/' . thedir, 0777); 
    $objWriter->save($fileName); 
} 

if (dir($dirName) && (!file_exists($fileName))) 
{ 
    $objWriter->save($fileName); 
} 

if (dir($dirName) && file_exists($fileName)) 
{ 
    $objWriter->save('somedir/' . $thedir . '/' . $thefile . '_R1.xlsx'); 
} 

if (dir($dirName) && file_exists($fileName1)) 
{ 
    $objWriter->save('somedir/' . $thedir . '/' . $thefile . '_R2.xlsx'); 
} 

... 
+0

你需要[is_dir()](http://php.net/is_dir)函數[DIR()](HTTP: //php.net/dir)不會像你想象的那樣行事 – Touki

回答

0
if (!is_dir($dir)) 
    mkdir($dir, 0777); 

$suffixes = array('_R1.xlsx', '_R2.xlsx'); 
foreach($suffixes as $suffix) { 
    $fileName = $dir.'/' . $thefile . $suffix; 
    if (! file_exists($fileName)) { 
    $objWriter->save($fileName); 
    break; 
    } 
} 

您必須添加錯誤處理,並請注意,僅僅檢查文件可創建的併發問題(兩個進程嘗試都看到這該文件不存在並嘗試創建它)。

+0

非常感謝,這很有魅力。我如何使第一個文件沒有後綴,然後是後來的R1 .... Rn – Alphy

+0

我終於明白了,我不必在數組的第一個值中使用後綴 – Alphy

+0

空後綴''' ' –

0

您將需要使用[is_dir][1]函數來檢查文件夾是否存在。

看看這個代碼 - 從一個有點返工你

$fileName1=$fileName1='somedir/'.$thedir.'/'.$thefile.'_R1.xlsx'; 
.... 

// Directory does not exist - create it 
if (!is_dir($dirName)) 
{ 
    mkdir('somedir/' . thedir, 0777); 
    $objWriter->save($fileName); 
} 

// Directory exists 
if (is_dir($dirName)) 
{ 
    // File does not exist - create it 
    if (!file_exists($fileName))) 
    { 
     $objWriter->save($fileName); 
    } 

    // Check one more time if the file exists 
    if (file_exists($fileName))) 
    { 
     $objWriter->save('somedir/' . $thedir . '/' . $thefile . '_R1.xlsx'); 
     $objWriter->save('somedir/' . $thedir . '/' . $thefile . '_R2.xlsx'); 
    } 
} 

....... 
相關問題