2013-05-02 68 views
0

我正在处理一个具有输入文件夹以接收一些要处理的文件的应用程序。不幸的是,我们的客户选择UNIX作为他的操作系统来运行他的主要软件,他有共享文件夹,我们可以通过网络获取内容。他的主要软件写文件很奇怪:首先,它创建文件,然后将文件内容写入文件。我正在处理的应用程序在将文件放入文件夹并处理文件的时刻捕获该文件。在这种情况下,我们有一个“战斗”访问文件,因为主要软件正在编写内容,而我的应用程序试图打开它,看看它是否被另一个进程使用。每次我尝试打开文件时,都会抛出一个异常,但是我的catch语句没有捕获到异常。访问被拒绝尝试打开共享文件夹上的文件

当我尝试打开该文件,以查看是否它正在由另一进程使用如下因素代码用于:

public static void IsOpen(string file) 
{ 
    bool isOpen = true; 

    while (isOpen) 
    { 
     try 
     { 
      using (File.Open(file, FileMode.Open, FileAccess.Read, FileShare.None)) 
      { 
       isOpen = false; 
      } 
     } 
     catch (FileNotFoundException exp) 
     { 
      throw new Exception(exp.Message); 
     } 
     catch (DirectoryNotFoundException exp) 
     { 
      throw new Exception(exp.Message); 
     } 
     catch (IOException) 
     { 
      isOpen = true; 
      Thread.Sleep(500); 
     } 
    } 
} 

看起来File.Open被抛出exeception和处理它的方法内。我在catchs声明中加入了一些日志,看它是否正常工作,我也只写了catch (Exception),但它也不起作用。

当我的应用程序试图打开该文件,正在由另一个进程使用,它是写在事件查看器此消息:Access to the path '<path here>' is denied,而且这个错误日志:

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath) 
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) 
at Utilities.IsOpen(String strFile) 

我认为这是引发UnauthorizedAccessException ,但我的应用程序是Windows服务,当服务重新启动时,它会正常工作,因为内容已经写入文件本身。

任何想法? 谢谢。

+0

您需要能够应对这种情况。你确实会得到一个UnauthorizedAccessException。您需要执行类似重试的情况,并在该情况下超时。 – Ben 2013-05-02 13:55:08

回答

0

您需要能够应对这种情况。你确实会得到一个UnauthorizedAccessException。

您需要实现类似重试的情况下超时的情况。

+0

任何机会你有一段代码,因为我不明白你的观点。 – 2013-05-02 14:28:24

+0

@GuilhermeOliveira如果您的访问被拒绝,请等待5秒钟,然后重试。如果你再次尝试多次,然后放弃。 – Ben 2013-05-02 15:55:56

+0

是的,我已经尝试过了,即使如此也行不通。我把catch语句拿到带有事件查看器日志的'UnauthorizedAccessException'来写入以检查它是否发生,但不幸的是它没有,现在我不知道该怎么做。 – 2013-05-02 16:41:52

相关问题