相关疑难解决方法(0)

如何检查IOException是否足够 - 磁盘空间异常类型?

如何检查IOException"磁盘空间不足"异常类型?

目前我检查消息是否与"磁盘空间不足"相匹配,但我知道如果操作系统语言不是英语,这将不起作用.

.net c# diskspace exception-handling ioexception

63
推荐指数
4
解决办法
2万
查看次数

如何使用.net StreamReader打开已打开的文件?

我有一些.csv文件,我正在使用它作为测试台的一部分.我可以打开它们并且没有任何问题地阅读它们,除非我已经在Excel中打开了文件,在这种情况下我获得了IOException:

System.IO.IOException:进程无法访问文件'TestData.csv',因为它正由另一个进程使用.

这是测试平台的片段:

using (CsvReader csv = new CsvReader(new StreamReader(new FileStream(fullFilePath, FileMode.Open, FileAccess.Read)), false))
{
    // Process the file
}
Run Code Online (Sandbox Code Playgroud)

这是StreamReader的限制吗?我可以在其他应用程序(例如Notepad ++)中打开该文件,因此它不能成为操作系统问题.也许我需要使用其他一些课程?如果有人知道如何绕过这个(除了关闭excel!)我会非常感激.

.net file readonly streamreader

48
推荐指数
3
解决办法
5万
查看次数

C#for FileStream构造函数抛出异常,CreateNew用于现有文件

我在C#(.NET Web服务)中创建一个文件,并且不想覆盖现有文件.

方法似乎是构建一个FileMode.CreateNew设置的FileStream.事实上,如果文件存在,它会抛出异常.

但是,如何识别此异常,而不是文件创建引发的其他可能异常?http://msdn.microsoft.com/en-us/library/47ek66wy.aspx上的文档将此案例列为"IOException",这显然是模糊的,因为其他事情可能会导致这种情况.

这里的答案是我捕获IOException然后只是做一个File.Exists?

c# exception ioexception file-exists

4
推荐指数
1
解决办法
1365
查看次数

如何捕获特定的OleDbException?

我需要捕获以下特定异常:

捕获到System.Data.OleDb.OleDbException ErrorCode = -2147467259
Message ="您向表请求的更改未成功,因为它们将在索引,主键或关系中创建重复值.更改字段或字段中的数据包含重复数据,删除索引或重新定义索引以允许重复条目,然后重试." Source ="Microsoft JET数据库引擎"StackTrace:位于System.Data.OleDb.OleDbCommand的System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)处的System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,Object&executeResult). System.Data.OleDb.OleDbCommand.ExecuteNonQuery上的System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior,String method)中的System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior,Object&executeResult)中的ExecuteCommandText(Object&executeResult)( )

我不确定ErrorCode它是什么,但它看起来不可靠.

我可以依赖于Message跨平台的相同吗?

我可以以某种方式使用OleDbHResult hr堆栈跟踪中找到的值吗?(参见/sf/answers/69416231/)

是做一个文本搜索的唯一解决方案Message的话想duplicateprimary key

.net exception-handling oledbconnection hresult

2
推荐指数
1
解决办法
6036
查看次数

IOException HResult可能的值

我发现有时在IO操作中会抛出常见的IOException.我可以使用Marshal.GetHRForException(异常e)方法(在这里找到)来确定特定的错误代码.之后,我想使用我的应用程序特定的错误代码重新抛出异常,以便向用户提供一些错误的提示.但我无法找到IOException的可能HResult值列表.

我坚持的另一件事是,对于不同的HResult代码,根本原因可能是相同的 - 例如,0x8007052E0x80070569 - 都对应于Logon failure: unknown user name or bad password.

我试图搜索类似"IOException HResult values"之类的东西,但是没有什么特别的用于映射IOException HResult与人类可读的错误(像这样这样).

我也在这里看到了一个非常相似的问题,但仍然没有解决方案.

那么,有关IOException HResults值的文档在哪里?

.net c# error-handling ioexception hresult

2
推荐指数
1
解决办法
2532
查看次数

尽管有IOException catch块,但仍引发IOException

我们有一个Windows Forms应用程序,该应用程序连接到某些Web服务。它列出了系统中的文档,当用户双击文档时,我们将文件下载到本地计算机,然后打开文档进行编辑。用户关闭文档后,我们会将其上传回系统。

在此过程中,我们一直在监视文档上的文件锁定。释放文件锁后,我们就会上载文档。

IsFileLocked方法如下所示:

private const int ErrorLockViolation = 33;
private const int ErrorSharingViolation = 32;

private static bool IsFileLocked(string fileName)
{
    Debug.Assert(!string.IsNullOrEmpty(fileName));

    try
    {
        if (File.Exists(fileName))
        {
            using (FileStream fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
            {
                fs.ReadByte();
            }
        }

        return false;
    }
    catch (IOException ex)
    {
        // get the HRESULT for this exception
        int errorCode = Marshal.GetHRForException(ex) & 0xFFFF;

        return errorCode == ErrorSharingViolation || errorCode == ErrorLockViolation;
    }
}
Run Code Online (Sandbox Code Playgroud)

我们将其称为循环,两次尝试之间有5秒钟的睡眠时间。在大多数情况下,这似乎效果很好,但有时我们会IOException从这种方法中看到一个。我看不到有可能引发此异常。

例外是:

IOException: The process cannot …
Run Code Online (Sandbox Code Playgroud)

.net c#

2
推荐指数
1
解决办法
487
查看次数