Perl-将文件从一个位置复制到另一个位置,但不复制内容

时间:2017-10-06 07:18:15

标签: perl

我正在perl中编写一个脚本,我正在创建一个文件并从用户那里获取文件输入但是当我将该文件复制到其他位置时,文件正在复制,但它只是空的。我的代码是

# !/usr/bin/perl -w
for($i = 1;$i<5;$i++)
{
  open(file1,"</u/man/fr$i.txt");
  print "Enter text for file $i";
  $txt = <STDIN>;
  print file1 $txt;
  open(file2,">/u/man/result/fr$i.txt");
  while(<file1>)
  {
     print file2 $_;
  }
  close(file1);
  close(file2);
}

fr1到fr4正在创建,但这些都是空的。就像我运行我的代码时,它要求输入我提供输入和代码运行没有错误但仍然文件是空的。请帮忙。 在第4行,我改变了&lt;到&gt;同样,我想创建新文件可能需要它,但它仍然无法正常工作

4 个答案:

答案 0 :(得分:3)

您需要关闭写入的文件句柄才能从该文件中读取。

use warnings;
use strict;
use feature 'say';

for my $i (1..4)
{
    my $file = "file_$i.txt";
    open my $fh, '>', $file or die "Can't open $file: $!";

    say $fh "Written to $file";

    # Opening the same filehandle first *closes* it if already open
    open $fh, '<', $file  or die "Can't open $file: $!";

    my $copy = "copy_$i.txt";
    open my $fh_cp, '>', $copy  or die "Can't open $copy: $!";

    while (<$fh>) {
        print $fh_cp $_;
    }
    close $fh_cp;  # in case of early errors in later iterations
    close $fh;
}

这会创建四个文件file_1.txt等及其副本copy_1.txt等。

请注意必须检查open是否有效。

答案 1 :(得分:3)

您无法写入未写入的文件句柄。您无法从不能阅读的文件句柄中读取。永远不要忽略open的返回值。

# !/usr/bin/perl
use warnings;                              # Be warned about mistakes.
use strict;                                # Prohibit stupid things.

for my $i (1 .. 4) {                       # lexical variable, range
    open my $FH1, '>', "/u/man/fr$i.txt"   # 3 argument open, lexical filehandle, open for writing
        or die "$i: $!";                   # Checking the return value of open

    print "Enter text for file $i: ";
    my $txt = <STDIN>;
    print {$FH1} $txt;

    open my $FH2, '<', "/u/man/fr$i.txt"   # Reopen for reading.
        or die "$i: $!";
    open my $FH3, '>', "/u/man/result/fr$i.txt" or die "$i: $!";
    while (<$FH2>) {
        print {$FH3} $_;
    }
    close $FH3;
}

答案 2 :(得分:0)

我使用filehandler1在写入模式下打开文件然后我再次使用相同的filehandler1以读取模式打开文件然后我打开了文件处理程序2 for destiantion所以它对我来说工作正常。

答案 3 :(得分:0)

system("cp myfile1.txt /somedir/myfile2.txt")
`cp myfile1.txt /somedir/myfile2.txt`