Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re^5: Copying a file to a temporary file

by BrowserUk (Patriarch)
on Jun 16, 2004 at 17:53 UTC ( [id://367340]=note: print w/replies, xml ) Need Help??


in reply to Re^4: Copying a file to a temporary file
in thread Copying a file to a temporary file

That doesn't look like a great way to choose a backup filename - the rename will succeed even for candidate backup filenames that exist (permissions permitting),...

Really? I'm pretty certain that I have never used a filesystem that, regardless of permissions, would allow you to rename one file on top of an existing one. Which filesystem are you using?


Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
"Memory, processor, disk in that order on the hardware side. Algorithm, algoritm, algorithm on the code side." - tachyon
  • Comment on Re^5: Copying a file to a temporary file

Replies are listed 'Best First'.
Re^6: Copying a file to a temporary file
by shay (Beadle) on Jun 17, 2004 at 07:43 UTC
    I don't think the filesystem is relevant. It is true that on my Windows NTFS filesystem that the shell command "rename" will not rename OLDNAME to NEWNAME if NEWNAME already exists, but we're talking about Perl...

    The perlfunc manpage entry for Perl's built-in rename() function says:

    Changes the name of a file; an existing file NEWNAME will be clobbered.
    and it's quite correct (I just tried it to make sure!).

    Any more thoughts on my temporary file issue?

    - Steve

      I really never knew that. How dumb. Both my assumption in not checking what I knew could never be so and the logic that makes me wrong. You'll have to decide for yourself which is dumber:)

      It will be a while before I stop thinking about the logic that allows a rename function to become a "delete target and then copy over" command.

      You could consider this.

      #! perl -slw use strict; use Win32::API::Prototype; ApiLink( 'kernel32', 'UINT GetTempFileName( LPCTSTR lpPathName, LPCTSTR lpPrefixString, UINT uUnique, LPTSTR lpTempFileName )' ) or die $^E; my $tempFileName = ' ' x 254; my $path = '.'; my $prefix = 'temp0000'; GetTempFileName( $path, $prefix, 0, $tempFileName ) or die $^E; print $tempFileName;

      After the above code has been run, the an empty file with the name returned will have been created. You can then open and use it as you need to.


      Examine what is said, not who speaks.
      "Efficiency is intelligent laziness." -David Dunham
      "Think for yourself!" - Abigail
      "Memory, processor, disk in that order on the hardware side. Algorithm, algoritm, algorithm on the code side." - tachyon

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://367340]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others cooling their heels in the Monastery: (2)
As of 2024-04-26 02:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found