⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch09_03.htm

📁 By Tom Christiansen and Nathan Torkington ISBN 1-56592-243-3 First Edition, published August 1998
💻 HTM
字号:
<HTML><HEAD><TITLE>Recipe 9.2. Deleting a File (Perl Cookbook)</TITLE><METANAME="DC.title"CONTENT="Perl Cookbook"><METANAME="DC.creator"CONTENT="Tom Christiansen &amp; Nathan Torkington"><METANAME="DC.publisher"CONTENT="O'Reilly &amp; Associates, Inc."><METANAME="DC.date"CONTENT="1999-07-02T01:39:05Z"><METANAME="DC.type"CONTENT="Text.Monograph"><METANAME="DC.format"CONTENT="text/html"SCHEME="MIME"><METANAME="DC.source"CONTENT="1-56592-243-3"SCHEME="ISBN"><METANAME="DC.language"CONTENT="en-US"><METANAME="generator"CONTENT="Jade 1.1/O'Reilly DocBook 3.0 to HTML 4.0"><LINKREV="made"HREF="mailto:online-books@oreilly.com"TITLE="Online Books Comments"><LINKREL="up"HREF="ch09_01.htm"TITLE="9. Directories"><LINKREL="prev"HREF="ch09_02.htm"TITLE="9.1. Getting and Setting Timestamps"><LINKREL="next"HREF="ch09_04.htm"TITLE="9.3. Copying or Moving a File"></HEAD><BODYBGCOLOR="#FFFFFF"><img alt="Book Home" border="0" src="gifs/smbanner.gif" usemap="#banner-map" /><map name="banner-map"><area shape="rect" coords="1,-2,616,66" href="index.htm" alt="Perl Cookbook"><area shape="rect" coords="629,-11,726,25" href="jobjects/fsearch.htm" alt="Search this book" /></map><div class="navbar"><p><TABLEWIDTH="684"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch09_02.htm"TITLE="9.1. Getting and Setting Timestamps"><IMGSRC="../gifs/txtpreva.gif"ALT="Previous: 9.1. Getting and Setting Timestamps"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1"><ACLASS="chapter"REL="up"HREF="ch09_01.htm"TITLE="9. Directories"></A></FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch09_04.htm"TITLE="9.3. Copying or Moving a File"><IMGSRC="../gifs/txtnexta.gif"ALT="Next: 9.3. Copying or Moving a File"BORDER="0"></A></TD></TR></TABLE></DIV><DIVCLASS="sect1"><H2CLASS="sect1"><ACLASS="title"NAME="ch09-chap09_deleting_0">9.2. Deleting a File</A></H2><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch09-pgfId-316">Problem<ACLASS="indexterm"NAME="ch09-idx-1000004362-0"></A><ACLASS="indexterm"NAME="ch09-idx-1000004362-1"></A><ACLASS="indexterm"NAME="ch09-idx-1000004362-2"></A><ACLASS="indexterm"NAME="ch09-idx-1000004362-3"></A></A></H3><PCLASS="para">You want to delete a file. Perl's <CODECLASS="literal">delete</CODE> function isn't what you want.</P></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch09-pgfId-322">Solution</A></H3><PCLASS="para">Use Perl's standard <CODECLASS="literal">unlink</CODE> function:</P><PRECLASS="programlisting">unlink($FILENAME)                 or die &quot;Can't delete $FILENAME: $!\n&quot;;unlink(@FILENAMES) == @FILENAMES  or die &quot;Couldn't unlink all of @FILENAMES: $!\n&quot;;</PRE></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch09-pgfId-1000004241">Discussion</A></H3><PCLASS="para">The <CODECLASS="literal">unlink</CODE> function takes its name from the Unix system call. Perl's <CODECLASS="literal">unlink</CODE> takes a list of filenames and returns the number of filenames successfully deleted. This return value can then be tested with <CODECLASS="literal">||</CODE> or <CODECLASS="literal">or</CODE>:</P><PRECLASS="programlisting">unlink($file) or die &quot;Can't unlink $file: $!&quot;;</PRE><PCLASS="para"><CODECLASS="literal">unlink</CODE> doesn't report which filenames it couldn't delete, only how many it did delete. Here's one way to test for successful deletion of many files and to report the number deleted:</P><PRECLASS="programlisting">unless (($count = unlink(@filelist)) == @filelist) {    warn &quot;could only delete $count of &quot;            . (@filelist) . &quot; files&quot;;}</PRE><PCLASS="para">A <CODECLASS="literal">foreach</CODE> over <CODECLASS="literal">@filelist</CODE> would permit individual error messages.</P><PCLASS="para">Under Unix, deleting a file from a directory requires write access to the directory,[<ACLASS="footnote"HREF="#ch09-pgfId-1000000662">1</A>] not to the file, because it's the directory you're changing. Under some circumstances, you could remove a file you couldn't write to or write to a file you couldn't remove.</P><BLOCKQUOTECLASS="footnote"><DIVCLASS="footnote"><PCLASS="para"><ACLASS="footnote"NAME="ch09-pgfId-1000000662">[1]</A> Unless the sticky bit, mode 01000, is turned on for the directory, which further restricts deletions to be by the owner only. Shared directories like <EMCLASS="emphasis">/tmp</EM> are usually mode 01777 for security reasons.</P></DIV></BLOCKQUOTE><PCLASS="para">If you delete a file that some process still has open, the operating system removes the directory entry but doesn't free up data blocks until all processes have closed the file. This is how the <CODECLASS="literal">new_tmpfile</CODE> function in IO::File (see <ACLASS="xref"HREF="ch07_06.htm"TITLE="Creating Temporary Files">Recipe 7.5</A>) works.<ACLASS="indexterm"NAME="ch09-idx-1000004364-0"></A><ACLASS="indexterm"NAME="ch09-idx-1000004364-1"></A><ACLASS="indexterm"NAME="ch09-idx-1000004364-2"></A><ACLASS="indexterm"NAME="ch09-idx-1000004364-3"></A></P></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch09-pgfId-356">See Also</A></H3><PCLASS="para">The <CODECLASS="literal">unlink</CODE> function in <ICLASS="filename">perlfunc </I>(1) and in <ACLASS="olink"HREF="../prog/ch03_01.htm">Chapter 3</A> of <ACLASS="citetitle"HREF="../prog/index.htm"TITLE="Programming Perl"><CITECLASS="citetitle">Programming Perl</CITE></A>; your system's <ICLASS="filename">unlink </I>(2) manpage; we use the idea of a file that has been deleted but is still accessible in <ACLASS="xref"HREF="ch07_06.htm"TITLE="Creating Temporary Files">Recipe 7.5</A></P></DIV></DIV><DIVCLASS="htmlnav"><P></P><HRALIGN="LEFT"WIDTH="684"TITLE="footer"><TABLEWIDTH="684"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch09_02.htm"TITLE="9.1. Getting and Setting Timestamps"><IMGSRC="../gifs/txtpreva.gif"ALT="Previous: 9.1. Getting and Setting Timestamps"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><ACLASS="book"HREF="index.htm"TITLE="Perl Cookbook"><IMGSRC="../gifs/txthome.gif"ALT="Perl Cookbook"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch09_04.htm"TITLE="9.3. Copying or Moving a File"><IMGSRC="../gifs/txtnexta.gif"ALT="Next: 9.3. Copying or Moving a File"BORDER="0"></A></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228">9.1. Getting and Setting Timestamps</TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><ACLASS="index"HREF="index/index.htm"TITLE="Book Index"><IMGSRC="../gifs/index.gif"ALT="Book Index"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228">9.3. Copying or Moving a File</TD></TR></TABLE><HRALIGN="LEFT"WIDTH="684"TITLE="footer"><FONTSIZE="-1"></DIV<!-- LIBRARY NAV BAR --> <img src="../gifs/smnavbar.gif" usemap="#library-map" border="0" alt="Library Navigation Links"><p> <a href="copyrght.htm">Copyright &copy; 2002</a> O'Reilly &amp; Associates. All rights reserved.</font> </p> <map name="library-map"> <area shape="rect" coords="1,0,85,94" href="../index.htm"><area shape="rect" coords="86,1,178,103" href="../lwp/index.htm"><area shape="rect" coords="180,0,265,103" href="../lperl/index.htm"><area shape="rect" coords="267,0,353,105" href="../perlnut/index.htm"><area shape="rect" coords="354,1,446,115" href="../prog/index.htm"><area shape="rect" coords="448,0,526,132" href="../tk/index.htm"><area shape="rect" coords="528,1,615,119" href="../cookbook/index.htm"><area shape="rect" coords="617,0,690,135" href="../pxml/index.htm"></map> </BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -