【问题标题】:IO.File.Exists("") on Novell Win 7 client can cause a "network error"Novell Win 7 客户端上的 IO.File.Exists("") 会导致“网络错误”
【发布时间】:2014-10-29 12:40:02
【问题描述】:

首先是底线...
如果您在包含 IO.File.Exist(FileTest) 的 Novell 客户端 Win7 上使用循环来寻找 FileTest 消失,这意味着该继续前进,请从另一个客户端删除 FileTest ,然后你尝试使用 FileTest 代表的名称,你会得到一个网络错误。我认为它与Novell Client Win7有关的原因是如果共享是Windows共享,我看不出问题。此外,当我们的客户是 XP SP3(不确定 Novell 版本)时,我们没有看到这一点。如评论中所述,我在 SAMBA 共享上尝试过此操作,但没有发现问题。


接下来是细节......
重现它很简单。

Module Module1
    Sub Main()
        Dim FileTest As String = "\\corp01\vol1\bbs\test.flg" 'corp01 is a Novell share'
        IO.File.WriteAllText(FileTest, "")
        Do While IO.File.Exists(FileTest)
            System.Threading.Thread.Sleep(100)
        Loop
    End Sub
End Module

然后从另一个客户端删除 test.flg,程序按预期结束。尝试再次运行它,当它尝试在 WriteAllText 中创建它时,您将收到网络错误。谁或如何创建文件似乎并不重要。我试图删除 WriteAllText 并从另一个客户端创建它,然后启动程序,从另一个客户端删除它,但在尝试引用名称时仍然出现网络错误。


我猜....
我认为该名称以某种方式被缓存。修复它的唯一方法是从 Windows 注销。另一个原因,如果 WriteFileText 抛出错误并且我尝试了另一种创建它的方式,仍然有错误。例如,在资源管理器中,我在共享上创建了一个文本文件,工作正常。然后尝试将创建的文件重命名为我的标志名称,网络错误。除了我用作标志文件的名称之外,我可以将其重命名为任何其他文件名。

【问题讨论】:

  • 我看不出您的问题与标题中的IO.File.Exists(“”) 有何关联。
  • 一开始我并没有真正看到这个问题:D
  • 至于标题,我愿意接受建议。问题应该是:-),关于如何做到这一点的任何想法?它是 Windows 中的错误吗,Novell?
  • 我刚刚在 smaba 共享上尝试过,没有收到错误。所以跟Win7 Novell客户端有关。
  • Novell 客户端在 15 年前是一个非常糟糕的软件。每个新版本都更糟。 Novell 不再从事他们曾经拥有的网络业务的一个重要原因。今天仍然使用它是非常不可取的。

标签: .net novell


【解决方案1】:

目前这是我能找到的最佳解决方案。基本上我尝试了windows API,它没有问题。我用所有三个共享(windows、Novell、SAMBA)测试了它,它似乎工作。这是作为仅供参考的代码。神奇之处在于 BRFileExist 类。结束时可能需要进行某种尝试/捕获/最终。我要先试一下,这是在生产中。

Class BRFileExist
    ' #VBIDEUtils#**************************************************
    ' * Programmer Name  : Waty Thierry
    ' * Web Site         : www.geocities.com/ResearchTriangle/6311/
    ' * E-Mail           : waty.thierry@usa.net
    ' * Date             : 28/06/99
    ' * Time             : 12:24
    ' **************************************************************
    ' * Comments         : API FileExist
    ' *
    ' *
    ' ****************************************************************'

    Private Const INVALID_HANDLE_VALUE = -1

    Private Structure FILETIME
        Dim dwLowDateTime As Long
        Dim dwHighDateTime As Long
    End Structure

    Private Structure WIN32_FIND_DATA
        Dim dwFileAttributes As Long
        Dim ftCreationTime As FILETIME
        Dim ftLastAccessTime As FILETIME
        Dim ftLastWriteTime As FILETIME
        Dim nFileSizeHigh As Long
        Dim nFileSizeLow As Long
        Dim dwReserved0 As Long
        Dim dwReserved1 As Long
        Dim cFileName As String
        Dim cAlternate As String
    End Structure

    Private Declare Function FindFirstFile Lib "kernel32" _
       Alias "FindFirstFileA" _
       (ByVal lpFileName As String, _
       ByVal lpFindFileData As WIN32_FIND_DATA) As Long

    Private Declare Function FindClose Lib "kernel32" _
       (ByVal hFindFile As Long) As Long
    Public Shared Function FileExist(ByVal pPath As String) As Boolean
        Dim WFD As New WIN32_FIND_DATA
        Dim hFile As Long = FindFirstFile(pPath, WFD)
        Dim retFileExist As Boolean = (hFile <> INVALID_HANDLE_VALUE)
        FindClose(hFile)
        Return retFileExist
    End Function
End Class

【讨论】:

    猜你喜欢
    • 2014-09-23
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    相关资源
    最近更新 更多