Lotus@ 2010-04-08 15:09 采纳率: 100%
浏览 122
已采纳

如何检查 Perl 中是否存在文件?

I have a relative path

   $base_path = "input/myMock.TGZ";

myMock.TGZ is the file name located in input folder. The filename can change. But the path is always stored in $base_path.

I need to check if the file exists in $base_path.

转载于:https://stackoverflow.com/questions/2601027/how-can-i-check-if-a-file-exists-in-perl

  • 写回答

8条回答 默认 最新

  • python小菜 2010-04-08 15:10
    关注

    Test whether something exists at given path using the -e file-test operator.

    print "$base_path exists!\n" if -e $base_path;
    

    However, this test is probably broader than you intend. The code above will generate output if a plain file exists at that path, but it will also fire for a directory, a named pipe, a symlink, or a more exotic possibility. See the documentation for details.

    Given the extension of .TGZ in your question, it seems that you expect a plain file rather than the alternatives. The -f file-test operator asks whether a path leads to a plain file.

    print "$base_path is a plain file!\n" if -f $base_path;
    

    The perlfunc documentation covers the long list of Perl's file-test operators that covers many situations you will encounter in practice.

    • -r
      File is readable by effective uid/gid.
    • -w
      File is writable by effective uid/gid.
    • -x
      File is executable by effective uid/gid.
    • -o
      File is owned by effective uid.
    • -R
      File is readable by real uid/gid.
    • -W
      File is writable by real uid/gid.
    • -X
      File is executable by real uid/gid.
    • -O
      File is owned by real uid.
    • -e
      File exists.
    • -z
      File has zero size (is empty).
    • -s
      File has nonzero size (returns size in bytes).
    • -f
      File is a plain file.
    • -d
      File is a directory.
    • -l
      File is a symbolic link (false if symlinks aren’t supported by the file system).
    • -p
      File is a named pipe (FIFO), or Filehandle is a pipe.
    • -S
      File is a socket.
    • -b
      File is a block special file.
    • -c
      File is a character special file.
    • -t
      Filehandle is opened to a tty.
    • -u
      File has setuid bit set.
    • -g
      File has setgid bit set.
    • -k
      File has sticky bit set.
    • -T
      File is an ASCII or UTF-8 text file (heuristic guess).
    • -B
      File is a “binary” file (opposite of -T).
    • -M
      Script start time minus file modification time, in days.
    • -A
      Same for access time.
    • -C
      Same for inode change time (Unix, may differ for other platforms)
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿