相关疑难解决方法(0)

为非现有网络共享加速File.Exists

我必须检查一组文件路径是否代表现有文件.

它工作正常,除非路径包含不在当前网络上的计算机上的网络共享.在这种情况下,超时需要很长时间(30或60秒).

问题

  • 有没有办法缩短非现有网络共享的超时?(我确信当他们确实存在时他们会很快回答,所以超时1秒就可以了)

  • 有没有其他方法可以解决这个问题,而无需开始缓存并使算法更复杂?(即,我已经知道这些X网络共享不存在,跳过其余的匹配路径)

更新:使用线程工作,但不是特别优雅

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;
}
Run Code Online (Sandbox Code Playgroud)

此解决方案避免了每次尝试需要一个线程,首先检查哪些驱动器可以访问并将其存储在某处.


专家交换解决方案:

首先,您可以在IsDriveReady函数中设置"超时"值.我把它设置为5秒,但设置它适合任何适合你的.

下面使用3种方法:

  1. 第一个是WNetGetConnection API函数,它获取驱动器的UNC(\ servername\share)
  2. 第二个是我们的主要方法:Button1_Click事件
  3. 第三个是ping服务器的IsDriveReady功能.

这对我很有用!干得好:

'This API Function will be used to get the UNC of the drive
Private Declare Function WNetGetConnection Lib …
Run Code Online (Sandbox Code Playgroud)

c# networking timeout c#-2.0

33
推荐指数
3
解决办法
2万
查看次数

更快的DirectoryExists功能?

我用

DirectoryExists (const PathName : String);
Run Code Online (Sandbox Code Playgroud)

检查是否可以从计算机访问目录.但是如果目录不存在且路径名是网络路径,即

\\computer1\Data
Run Code Online (Sandbox Code Playgroud)

该方法需要很长时间才能返回.

必须有一种更快的方法来确定无法访问网络文件夹.或者我可以配置DirectoryExists在内部使用的一些超时参数(我查看了源代码,但它只是委托给kernel32中定义的GetFileAttributes)?

有任何想法吗?

delphi networking delphi-2009

15
推荐指数
3
解决办法
1万
查看次数

标签 统计

networking ×2

c# ×1

c#-2.0 ×1

delphi ×1

delphi-2009 ×1

timeout ×1