對於同一個文件,可能有兩個文件句柄嗎?perl中同一個文件的兩個文件句柄
open TXT,"+>","New" or die "Cannot Create File \n";
print TXT "Line1 \n";
open TXT1, ">>New" or die "Cannot open file";
print TXT1 "Line2 \n";
這項工作?
對於同一個文件,可能有兩個文件句柄嗎?perl中同一個文件的兩個文件句柄
open TXT,"+>","New" or die "Cannot Create File \n";
print TXT "Line1 \n";
open TXT1, ">>New" or die "Cannot open file";
print TXT1 "Line2 \n";
這項工作?
是,對同一文件可能有多個文件處理程序。 這將工作。
use strict;
use warning;
my $path = 'testfile';
open TXT,"+>",$path or die "Cannot Create File \n";
printf TXT "Line1\n";
open TXT1, ">>",$path or die "Cannot open file";
printf TXT1 "Line2\n" ;
close TXT;
close TXT1;
是的,它會工作。對同一個文件有幾個句柄是可以的。
但請注意,您的第一個文件處於覆蓋模式。 TXT1將始終在文件末尾寫入,但TXT將保留在其以前的位置並根據緩衝區重寫所有內容。
如果你這樣做:
print TXT "Line 1\n";
print TXT1 "Line 2\n";
print TXT "Line 3\n";
close TXT;
close TXT1;
您將有:
Line 1
Line 3
Line 2
,但如果你這樣做:
print TXT "Line 1\n";
print TXT1 "Line 2\n";
close TXT1; # this writes the buffer to disk
print TXT "Line 3\n";
close TXT;
您將有:
Line 1
Line 3
第2行被寫入,然後被第3行覆蓋。在第一種情況下,第3行位於緩衝區中,第2行被寫入,因爲文件首先關閉,然後第3行寫入追加。
所以,小心使用!
是的,可以爲同一個文件打開多個句柄,但(1)結果可能不是你想要的(見下文),(2)你是否真的需要這樣做,或者有更好的如何解決你的大問題?
這就是說,這裏就是一個小實驗發現我的Windows機器上:在寫模式
打開一個文件,追加模式一個文件:
my $file_name = 'text_write_append.txt';
open(my $fh1, ">", $file_name) or die $!;
open(my $fh2, ">>", $file_name) or die $!;
print $fh1 "foo\n" x 1;
print $fh2 "bar\n" x 2;
print $fh1 "x";
第二寫$fh1
選秀權在先前的寫入停止的地方,跺倒第一個bar
並截斷第二個。可能不是你想要的。
foo
xar
打開追加模式這兩個文件。
my $file_name = 'text_append_append.txt';
open(my $fh0, ">", $file_name) or die $!; close $fh0; # Create empty file.
open(my $fh1, ">>", $file_name) or die $!;
open(my $fh2, ">>", $file_name) or die $!;
print $fh1 "foo\n" x 1;
print $fh2 "bar\n" x 2;
print $fh1 "x";
我們所有的輸出都存在,但順序錯誤。
bar
bar
foo
x
開啓在附加模式這兩個文件,無需緩衝輸出。
my $file_name = 'text_append_append_flush.txt';
open(my $fh0, ">", $file_name) or die $!; close $fh0;
open(my $fh1, ">>", $file_name) or die $!; select $fh1; $| = 1; # No buffering.
open(my $fh2, ">>", $file_name) or die $!; select $fh2; $| = 1;
print $fh1 "foo\n" x 1;
print $fh2 "bar\n" x 2;
print $fh1 "x";
可能是您期望的(但請注意,無緩衝寫入通常比緩衝寫入更慢)。
foo
bar
bar
x
正如那句老話:「當你嘗試它時發生了什麼? – hobbs 2010-07-26 10:49:05
是的..它工作。感謝所有.. – Raj 2010-07-28 12:55:42