Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number

Check whether the file is in use by an other user

by fish (Novice)
on Jul 30, 2009 at 07:35 UTC ( #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

Comment on Check whether the file is in use by an other user
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?

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

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (1)
As of 2015-11-27 04:33 GMT
Find Nodes?
    Voting Booth?

    What would be the most significant thing to happen if a rope (or wire) tied the Earth and the Moon together?

    Results (718 votes), past polls