C# Determine if a file is being accessed

How can I test to see if a file is being accessed by another process? I want to be sure that the file is not being accessed before I perform an operation on it. And I want to test for this without throwing exceptions.
SGyvesAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
JipFromParisConnect With a Mentor Commented:
This doesn't sound like a problem. File delete attempt would fail if the file is actually in use by any other process. In order to be more specific, may I suggest you clarify the kind of operation you intend to perform once you've got exclusive mode on the file ?
0
 
JipFromParisCommented:
Just try this :

FileStream theFile = null;
try
{
    bool gotAccess = true;
    try {theFile = File.OpenFile(theFileName,  FileMode.Open, FileAccess.Read, FileShare.None);}
    catch (Exception) {gotAccess = false;}
    if (gotAccess)
   {
        // Here you've got exclusive access and you can perform the job.
   }
}
finally {if (theFile != null) {theFile.Close();}
0
 
SGyvesAuthor Commented:
What if what  I want to do is Delete the file? It has to be closed. And if I got access....I am presented with the same problem of making sure that the file is closed before I attempt a delete.
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
SGyvesAuthor Commented:
I can call Close on teh stream...but there is a period of time that must pass before the stream is actually closed and the file is released.
0
 
SGyvesAuthor Commented:
I am making a brute force file deleter. It is all too often that I want to delete a file that I do not need any more...but it is being accessed by another process. So, I tell the program to get all processes using that file...terminate them...and delete the file in question. However, there is a delay between the killing of the process, and the deletion of the file. I need to compensate for that. I would prefer that the program attempt to delete this file until it succeeds, or times out after a certain time.
0
 
SGyvesAuthor Commented:
Ok...got it. I just made a special delete method that returns false if it fails and true if it succeeds. That way  I can loop on it until it returns true.
0
All Courses

From novice to tech pro — start learning today.