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

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1870 | 回復(fù): 5
打印 上一主題 下一主題

pppk之Recipe7.11(2) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-08-27 21:30 |只看該作者 |倒序?yàn)g覽
本帖最后由 zhuyubei 于 2012-08-27 21:49 編輯

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

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

臨時(shí)文件的創(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";
復(fù)制代碼
我們這里試著用DIR參數(shù)來控制臨時(shí)文件產(chǎn)生的目錄。這里有個(gè)很重要的地方。在標(biāo)量環(huán)境下,tempfile直接返回的是文件的句柄而不是文件名!這里未必要記住。


論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2012-08-27 21:40 |只看該作者
那既然這里是文件句柄,而不是文件名。那在程序退出的時(shí)候,它會不會被刪除呢? 答案是被刪除了。而如果文件名字對用戶很重要呢?比如說名字里面有進(jìn)程號,或是某個(gè)運(yùn)行時(shí)變量名怎么辦呢?

這時(shí)候,你只要在列表環(huán)境下去調(diào)用tempfile這個(gè)函數(shù). 在先前返回句柄的基礎(chǔ)上,列表的第二個(gè)變量就接收了臨時(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:$!";
復(fù)制代碼
我們這里試著對文件進(jìn)行了寫操作。注意在用列表環(huán)境下的tempfile,默認(rèn)是不會刪除臨時(shí)文件的!我想庫作者認(rèn)為你既然要臨時(shí)文件的名字了,也許會對該文件進(jìn)一步操作。所以默認(rèn)情況下,文件不被刪除。

如果你在調(diào)試程序的時(shí)候要保留文件,就用列表環(huán)境下的賦值好了。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2012-08-27 21:47 |只看該作者
但是如果你雖然需要臨時(shí)文件名做一些后續(xù)處理,但是希望在程序退出的時(shí)候,為了節(jié)省硬盤空間,該文件又能被刪除,那怎么辦呢?
這時(shí)候,你可以在調(diào)用tempfile的時(shí)候指定其參數(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
復(fù)制代碼
注意是UNLINK而不是CLEANUP。刪除目錄用CLEANUP,刪除文件用UNLINK. 在指定UNLINK為1后,程序退出,臨時(shí)文件就會被刪除掉。

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

所以創(chuàng)建臨時(shí)文件主要問自己3個(gè)問題:
1. 需不需要用Template
2. 需不需要文件名
3. 需不需要被刪除

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2012-08-27 22:03 |只看該作者
Python的臨時(shí)文件創(chuàng)建主要是由tempfile來完成。

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

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

明天我們講,文件鎖。

論壇徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大;照
日期:2013-04-17 11:46:39
5 [報(bào)告]
發(fā)表于 2012-08-28 15:46 |只看該作者
貌似有點(diǎn)堅(jiān)持不住啊

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2012-08-28 15:50 |只看該作者
回復(fù) 5# cdtits


    哈哈。畢竟沒這么簡單。我一直嘗試自己實(shí)踐,而不是照搬書里的代碼。所以會有些累
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP