- Visitors can check out the Forum FAQ by clicking this link. You have to register before you can post: click the REGISTER link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below. View our Forum Privacy Policy.
- Want to receive the latest contracting news and advice straight to your inbox? Sign up to the ContractorUK newsletter here. Every sign up will also be entered into a draw to WIN £100 Amazon vouchers!
Reply to: .net detecting file in use
Collapse
You are not logged in or you do not have permission to access this page. This could be due to one of several reasons:
- You are not logged in. If you are already registered, fill in the form below to log in, or follow the "Sign Up" link to register a new account.
- You may not have sufficient privileges to access this page. Are you trying to edit someone else's post, access administrative features or some other privileged system?
- If you are trying to post, the administrator may have disabled your account, or it may be awaiting activation.
Logging in...
Previously on ".net detecting file in use"
Collapse
-
That is what I've done. The only issue that I have is if the IOException arises because of something other than a lock. It's probably OK since it does a limited number of retrys and then throws.Originally posted by eek View Post+1 fullautomatix's stackoverflow link is the right approach if you simply want to check if a file .
If you have full control the unix lock file approach provides you with more information which may be useful if processes hit a snag.
However I did find this which might be useful, need to think about it because it is reliant on a specific result as a magic number so is vulnerable to change and different platform issues:-
catch (IOException e)
{
return (Marshal.GetHRForException(e) & 0xFFFF) == 32;
}
The only other idea I could think of was to create a machine wide synchroinzation object and lock through that. In effect this means a named mutex I think. Certainly a bit of a faff.
A final thought was to open the file differently (e.g. read write allow share) and then call "lock" - the documentation states that the only reason for the IOException this can throw is because it is locked, but then I can't assume anything about how the other process might have the file opened so that doesn't work either.
Cheers folks.
Leave a comment:
-
+1 fullautomatix's stackoverflow link is the right approach if you simply want to check if a file .Originally posted by fullyautomatix View PostNo you were offering a completely idiotic solution and Nick has rightly criticised it.
If you have full control the unix lock file approach provides you with more information which may be useful if processes hit a snag.
Leave a comment:
-
No you were offering a completely idiotic solution and Nick has rightly criticised it.Originally posted by russellWell I was just giving an example, not going to do his job for him.
Leave a comment:
-
c# - Is there a way to check if a file is in use? - Stack Overflow
I think some kind of retry attempts logic mechanism is the only way to do it.
Leave a comment:
-
Should work a treat, except in Germany, or France, or Japan, or...Originally posted by russell View PostI assume you don't want to write code that looks at the message because it is a string and isn't all type safe etc? You could do exception.Message.Contains("in use") or something similar?
Leave a comment:
-
What if another app is using the file, and that app doesn't implement your idea of creating lock files?Originally posted by eek View PostUse a separate lock file. If lock file exists don't try to open the file. If lock file doesn't exist open file and then create lock file. When file is closed remove the lock file.
The next stop would be to check if the lock file has existed for a significant amount of time. If it has kill the other process and restart that program.
Granted its a rather unix way of managing files but if it works steal it.
Leave a comment:
-
I assume you don't want to write code that looks at the message because it is a string and isn't all type safe etc?Originally posted by ASB View PostI have 2 processes writing some info to the same file. It's a small file the contents of which get replaced.
I'm trying to figure out a reliable way of detecting the file is in use so I Can abort or retry or whatever.
I create a FileStream using Mode=Create, Access=Write, Share=None
The problem is that this will throw an IOException if the file is in use. But I can't tell that this is the problem. It could be any other FileException. The only way I could tell is to look at the exception message.
Any suggestions? Surely there must be a simple way. Haven't turned anything by googling so maybe not.Last edited by russell; 15 March 2012, 14:36.
Leave a comment:
-
Use a separate lock file. If lock file exists don't try to open the file. If lock file doesn't exist open file and then create lock file. When file is closed remove the lock file.Originally posted by ASB View PostI have 2 processes writing some info to the same file. It's a small file the contents of which get replaced.
I'm trying to figure out a reliable way of detecting the file is in use so I Can abort or retry or whatever.
I create a FileStream using Mode=Create, Access=Write, Share=None
The problem is that this will throw an IOException if the file is in use. But I can't tell that this is the problem. It could be any other FileException. The only way I could tell is to look at the exception message.
Any suggestions? Surely there must be a simple way. Haven't turned anything by googling so maybe not.
The next stop would be to check if the lock file has existed for a significant amount of time. If it has kill the other process and restart that program.
Granted its a rather unix way of managing files but if it works steal it.
Leave a comment:
-
.net detecting file in use
I have 2 processes writing some info to the same file. It's a small file the contents of which get replaced.
I'm trying to figure out a reliable way of detecting the file is in use so I Can abort or retry or whatever.
I create a FileStream using Mode=Create, Access=Write, Share=None
The problem is that this will throw an IOException if the file is in use. But I can't tell that this is the problem. It could be any other FileException. The only way I could tell is to look at the exception message.
Any suggestions? Surely there must be a simple way. Haven't turned anything by googling so maybe not.Tags: None
- Home
- News & Features
- First Timers
- IR35 / S660 / BN66
- Employee Benefit Trusts
- Agency Workers Regulations
- MSC Legislation
- Limited Companies
- Dividends
- Umbrella Company
- VAT / Flat Rate VAT
- Job News & Guides
- Money News & Guides
- Guide to Contracts
- Successful Contracting
- Contracting Overseas
- Contractor Calculators
- MVL
- Contractor Expenses
Advertisers

Leave a comment: