delphi – Faster DirectoryExists function? – Stack Overflow
Posted by jpluimers on 2021/02/04
From a while back: [WayBack] delphi – Faster DirectoryExists function? – Stack Overflow:
Q
I use
DirectoryExists (const PathName : String);
to check if a directory is reachable from a computer or not. But if the directory does not exist and the path name is a network path, i.e.
\\computer1\Data
the method takes a very long time to return.
There must be a faster way to determine that a network folder is not reachable. Or can I configure some timeout parameter that DirectoryExists uses internally (I looked at the source code but it just delegates to GetFileAttributes which is defined in kernel32)?
Any ideas?
A
There is no faster way:
any function accessing anything on a remote share will timeout when that share is not available.
If the cause of your timeouts is automatic disconnecting of shares, then these link may help you:
- How Autodisconnect Works in Windows NT and Windows 2000
- Mapped Drive Connection to Network Share May Be Lost
If the application can continue without the completion of the check, then you can put the check in a separate thread, and upon completion of the check, you can update your status in the UI.
Be aware that when you try a multi-threading way, that you have to disprove your code is free of race-conditions and memory leaks. Time-outs in combination with exceptions usually make that a hard task.
Related:
- [WayBack] CIFS and SMB Timeouts in Windows – Microsoft Open Specifications Support Team Blog
- [WayBack] SMB 2.x and SMB 3.0 Timeouts in Windows – Microsoft Open Specifications Support Team Blog
- [WayBack] network attached storage – Initial delay when browsing SMB share from Windows – Server Fault
- [WayBack] windows – Long SMB session setup delay – Super User
- [WayBack] network shares – Windows File Sharing – Long Initial Delay – Super User
- WayBack: How Autodisconnect Works in Windows NT and Windows 2000
- Mapped Drive Connection to Network Share May Be Lost
–jeroen
Leave a comment