亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: pppk之Recipe7.11(2) [打印本頁]

作者: zhuyubei    時間: 2012-08-27 21:30
標題: pppk之Recipe7.11(2)
本帖最后由 zhuyubei 于 2012-08-27 21:49 編輯

上周5有些事,就沒寫。今天講創(chuàng)建臨時文件

上次我們講了一個Template的概念,同樣這個概念可以繼續(xù)用在臨時文件里。我們先復習下
  1. # Create a temp file
  2. my $sFileTemplate = "TestTempFileXXXX";
復制代碼
最后連續(xù)的XXXX是隨機的字符串。隨機的字符串必須在最后,且至少4位,而前面的是固定的字符串,可以由用戶指定。

臨時文件的創(chuàng)建。要用到tempfile函數(shù)。用法和tempdir很類似。只是返回的不再只是目錄或文件的名字
  1. # Get filehandle in scalar context, file will be deleted
  2. my $fhTmpFile = tempfile( $sFileTemplate,  DIR => $sTmpDir );
  3. print "FileHandle only: $fhTmpFile\n";
復制代碼
我們這里試著用DIR參數(shù)來控制臨時文件產(chǎn)生的目錄。這里有個很重要的地方。在標量環(huán)境下,tempfile直接返回的是文件的句柄而不是文件名!這里未必要記住。



作者: zhuyubei    時間: 2012-08-27 21:40
那既然這里是文件句柄,而不是文件名。那在程序退出的時候,它會不會被刪除呢? 答案是被刪除了。而如果文件名字對用戶很重要呢?比如說名字里面有進程號,或是某個運行時變量名怎么辦呢?

這時候,你只要在列表環(huán)境下去調(diào)用tempfile這個函數(shù). 在先前返回句柄的基礎上,列表的第二個變量就接收了臨時文件在絕對路徑下的文件名。
  1. # Get filehandle and filename, file will be keep
  2. $sFileTemplate = "2222222FileXXXX";
  3. my ( $fhTmpFile, $sTmpFileName ) = tempfile( $sFileTemplate, DIR => $sTmpDir );
  4. print "FileName:$sTmpFileName\n";
  5. print $fhTmpFile "Test\n";# write something
  6. close ( $fhTmpFile ) or die "Can't close file $sTmpFileName:$!";
復制代碼
我們這里試著對文件進行了寫操作。注意在用列表環(huán)境下的tempfile,默認是不會刪除臨時文件的!我想庫作者認為你既然要臨時文件的名字了,也許會對該文件進一步操作。所以默認情況下,文件不被刪除。

如果你在調(diào)試程序的時候要保留文件,就用列表環(huán)境下的賦值好了。
作者: zhuyubei    時間: 2012-08-27 21:47
但是如果你雖然需要臨時文件名做一些后續(xù)處理,但是希望在程序退出的時候,為了節(jié)省硬盤空間,該文件又能被刪除,那怎么辦呢?
這時候,你可以在調(diào)用tempfile的時候指定其參數(shù)UNLINK為1。
  1. # Create temp file with more details
  2. $sFileTemplate = "3333333FileXXXX";
  3. # Specify extension and delete it always when program exits
  4. ( $fhTmpFile, $sTmpFileName )  =  tempfile( $sFileTemplate,   DIR => $sTmpDir,
  5.                                        SUFFIX => ".tmp", UNLINK => 1 ); # Not cleanup
復制代碼
注意是UNLINK而不是CLEANUP。刪除目錄用CLEANUP,刪除文件用UNLINK. 在指定UNLINK為1后,程序退出,臨時文件就會被刪除掉。

這里另一個參數(shù)SUFFIX也很有用,你可以指定臨時文件名的后綴。這里我們把它當作后綴名來使用。在加了后綴之后,可以避免臨時文件,被另一些進程當作正常的輸入文件來處理。

所以創(chuàng)建臨時文件主要問自己3個問題:
1. 需不需要用Template
2. 需不需要文件名
3. 需不需要被刪除
作者: zhuyubei    時間: 2012-08-27 22:03
Python的臨時文件創(chuàng)建主要是由tempfile來完成。

如果你不需要文件名(和默認的Perl類似),那可以調(diào)用tempfile.TemporayFile()
  1. noname = tempfile.TemporaryFile()
  2. noname.write("sdda")
  3. noname.seek(0)
  4. print noname.read()
復制代碼
Perl里的無名文件句柄也可以這么用。

而如果你要文件名,那需要使用tempfile.NamedTemporaryFile(),然后調(diào)用其name屬性,來查看文件名
  1. named = tempfile.NamedTemporaryFile();
  2. print named.name
復制代碼
貌似這里臨時文件在程序退出后,是被強制刪除的。另外和上周講得臨時目錄一樣,該函數(shù)支持
  1. 'prefix', 'suffix', 'dir'
復制代碼
之類的參數(shù)。這里就不多說了。

明天我們講,文件鎖。
作者: cdtits    時間: 2012-08-28 15:46
貌似有點堅持不住啊
作者: zhuyubei    時間: 2012-08-28 15:50
回復 5# cdtits


    哈哈。畢竟沒這么簡單。我一直嘗試自己實踐,而不是照搬書里的代碼。所以會有些累




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2