相关疑难解决方法(0)

如何确定System.IO.IOException的HResult?

System.Exception.HResult属性受保护.我怎样才能偷看异常并获得HResult而不诉诸于反思或其他丑陋的黑客攻击?


情况就是这样:
我想编写一个备份工具,它可以打开和读取系统上的文件.根据本指南,我使用FileAccess.Read和FileShare.ReadWrite打开文件,因为在我阅读文件时,我不在乎文件是否打开.

在某些情况下,当我读文件被打开另一个应用程序,该System.IO.FileStream.Read()方法引发System.IO.IOException,"该进程无法访问文件,因为另一个进程已锁定的一部分文件".这是错误33,或者我认为HResult 0x80070021.[ 编辑:我相信当另一个进程调用LockFileEx来锁定文件中的字节范围时,可以返回此值.]

当我收到此错误时,我想暂停并重试.我认为这是采取适当的行动.如果锁定进程快速释放字节范围锁,那么我可以继续读取该文件.

出于这个原因,我如何区分IOException?我可以想到这些方法:

  • 私人反思 - 不想那样做.Perf会发臭.
  • 调用Exception.ToString()并解析字符串.感觉hacky.在i18n版本中不起作用.

我不喜欢这些选择.是不是有更好,更清洁的方式?


我只是搜索并找到System.Runtime.InteropServices.Marshal.GetHRForException.那将返回像0x80070021这样的uint吗?

.net c# exception hresult

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

C#中的FileStream StreamReader问题

我正在测试类FileStream和StreamReader如何工作.通过控制台应用程序.我正在尝试进入文件并读取行并在控制台上打印它们.

我已经能够使用while循环来完成它,但我想尝试使用foreach循环.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace testing
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string file = @"C:\Temp\New Folder\New Text Document.txt";
            using(FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
            {
                using(StreamReader sr = new StreamReader(fs))
                {
                    foreach(string line in file)
                    {
                        Console.WriteLine(line);
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不断得到的错误是:无法将'char'类型转换为'string'

while循环确实有效,如下所示:

while((line = sr.ReadLine()) != null)
{
    Console.WriteLine(line);
}
Run Code Online (Sandbox Code Playgroud)

我可能忽略了一些非常基本的东西,但我看不到它.

c#

20
推荐指数
3
解决办法
7万
查看次数

如何对也在Excel中打开的文件执行File.ReadAllLines?

如何在string[]不获取IO异常的情况下读取也在Excel中打开的文本文件的所有行?

有一个问题可能是答案的一部分,虽然我不知道如何使用其中的内容: 如何使用.net StreamReader打开已打开的文件?

c# io

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

如何在C#上阅读打开的excel文件

我想用C#读取已打开的excel文件.我正在使用此方法,但它在Microsoft Excel中打开文件时无法读取excel文件.

FileStream stream = File.Open("myfile.xlsx", FileMode.Open, FileAccess.Read);
Run Code Online (Sandbox Code Playgroud)

它给 IOException: The process cannot access the file 'myfile.xlsx' because it is being used by another process.

我希望你明白我的意思.我想保持excel文件打开,当文件在Microsoft Excel打开时,我想从C#中读取它.我正在使用C#net framework 4.0

c# excel file-io ioexception

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

C#FileSystemWatcher和FTP

我通过文件系统观察器监视丢弃在ftp上的文件,然后移动到另一个目录.现在我触发了文件系统观察者的create事件的副本,但显然在ftp的情况下,create只是一个存根文件,数据进入并填充文件,因为它上传到完成.任何人都有一个优雅的解决方案,或者我必须做我认为我必须做的事情

1 wait till last access time is about n ms in past before I copy
2 throw a control file in there to state that that file is done being copied, then delete control file
3 pound the crap out of it
Run Code Online (Sandbox Code Playgroud)

c# ftp filesystemwatcher

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

标签 统计

c# ×5

.net ×1

excel ×1

exception ×1

file-io ×1

filesystemwatcher ×1

ftp ×1

hresult ×1

io ×1

ioexception ×1