妄徒之命 2010-04-08 15:09 采纳率: 100%
浏览 926
已采纳

如何检查 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条回答 默认 最新

  • MAO-EYE 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 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。
  • ¥15 opencv图像处理,需要四个处理结果图