Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Check whether the file is in use by an other user

by fish (Novice)
on Jul 30, 2009 at 07:35 UTC ( [id://784527]=note: print w/replies, xml ) Need Help??


in reply to Using Win32::OLE and Excel - Tips and Tricks

Hi, at first I just want to thank you for the great tutorial, but I still have a problem.
I am working with a file which is accessible by many users via network. When I open the excel-file I want to check, whether the file is opened by an other user or not. I just want to work with it if it is not opened.
A simple die() if it is in use would be enough for me.
So, is it possible to check whether an other user has opened the file?

Great Regards,
- fish

Replies are listed 'Best First'.
Re: Check whether the file is in use by an other user
by wazoox (Prior) on Jul 30, 2009 at 11:03 UTC
    IIRC Windows locks the file when opened. You may be able to check the file lock state, maybe something like this (I have no windows box to test):
    open my $fh, "/some/file" or die "can't open!"; # try/catch file locking eval { flock $fh, 'LOCK_EX' or die "can't lock!" }; if ( $@) { warn "open file!" && exit; }
      Thanks for your response. I tried your code and it's not bad but not exactly what I expected. Instead of showing an error-message if the file is opened the program waits until the file is getting closed. That is not bad, but kind of useless for my problem.

      I am sure we are pretty near to a solution, so can somebody tell me how it works - please ;)

      Best regards,
      - fish
        See the flock documentation to check the various (and numerous) available flags, there is probably one of them that'll do what you want :) BTW you really should have posted this in its own thread, because it's a problem completely unrelated to the scope of this tutorial.
        For those of you who are interessted in the topic. I solved the problem by myself.

        sysopen(FH, $file, O_WRONLY|O_EXCL) or die $!; works fine for me and it even works if the file is opened via a shared folder.

        Finally I want to apologize for my offtopic-postings. I thougt the "fileInUse"-check would be possible with a Win32::OLE-function and because of that I posted here and did not create a new thread. I hope I will do better in future.

        Best regards from sunny Germany.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (3)
As of 2024-03-29 02:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found