KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have to check if a set of file paths represent an existing file. It works fine except when the path contains a network share on a machine that's not on the current network. In this case it takes a pretty long time (30 or 60 seconds) to timeout. Questions Is there a way to shorten the timeout for non existing network shares? (I'm certain that when they do exist they'll answer quickly, so a timeout of 1 sec would be fine) Is there any other way to solve this issue without starting to cache and making the algorithm more complex? (ie, I already know these X network shares don't exist, skip the rest of the matching paths) UPDATE: Using Threads work, not particularly elegant, though public bool pathExists(string path) { bool exists = true; Thread t = new Thread ( new ThreadStart(delegate () { exists = System.IO.File.Exists(path); }) ); t.Start(); bool completed = t.Join(500); //half a sec of timeout if (!completed) { exists = false; t.Abort(); } return exists; } This solution avoids the need for a thread per attempt, first check which drives are reachable and store that somewhere. Experts exchange solution : First of all, there is a "timeout" value that you can set in the IsDriveReady function. I have it set for 5 seconds, but set it for whatever works for you. 3 methods are used below: The first is the WNetGetConnection API function that gets the UNC (\servername\share) of the drive The second is our main method: The Button1_Click event The third is the IsDriveReady function that pings the server. This worked great for me! Here you
Tags (comma-separated)
Save Edits
Cancel