C# .NET CF中的FileStream和ObjectDisposedException

C# .NET CF中的FileStream和ObjectDisposedException,c#,compact-framework,filestream,objectdisposedexception,C#,Compact Framework,Filestream,Objectdisposedexception,我对许多文件路径运行此方法,问题是每当无法使用file.Open访问文件时(因为它被另一个进程使用),我会得到: 在以下行: 'aStream.Position' threw an exception of type 'System.ObjectDisposedException' 而且我很少 binReader.BaseStream.Position = 0; 这是我想要的例外。那么,为什么在大多数情况下都会处理对象? 注意:我第一次在using语句中使用FileStream行,但删除了它

我对许多文件路径运行此方法,问题是每当无法使用file.Open访问文件时(因为它被另一个进程使用),我会得到:

在以下行:

'aStream.Position' threw an exception of type 'System.ObjectDisposedException'
而且我很少

binReader.BaseStream.Position = 0;
这是我想要的例外。那么,为什么在大多数情况下都会处理对象? 注意:我第一次在using语句中使用FileStream行,但删除了它,因为我认为这可能已经处理了对象。但问题依然存在


编辑:使用压缩框架,它没有
ReadAllBytes

为什么不直接使用

{System.IO.IOException: The process can not access the file '\folder\file.txt' because it is being used by another process.}
为了好玩,您甚至可以定义一个扩展方法

public byte[] GetFile(string filename)
{
    try { return File.ReadAllBytes(filename); }
    catch { return null; }
}
所以你可以做
byte[]myfile=filename.GetFile()
请记住,在继续之前,您必须检查return是否为null:

public static class Extensions
{
    public static byte[] GetFile(this string filename)
    {
        try { return File.ReadAllBytes(filename); }
        catch { return null; }
    }
}

你为什么不干脆用

{System.IO.IOException: The process can not access the file '\folder\file.txt' because it is being used by another process.}
为了好玩,您甚至可以定义一个扩展方法

public byte[] GetFile(string filename)
{
    try { return File.ReadAllBytes(filename); }
    catch { return null; }
}
所以你可以做
byte[]myfile=filename.GetFile()
请记住,在继续之前,您必须检查return是否为null:

public static class Extensions
{
    public static byte[] GetFile(this string filename)
    {
        try { return File.ReadAllBytes(filename); }
        catch { return null; }
    }
}
只要用这个:

if (myfile != null)
{
    // Do what you need
}
只要用这个:

if (myfile != null)
{
    // Do what you need
}

可能当您的
FileStream
在使用文件时抛出
IOException
,而在其他时间,可能,由于数组未初始化,您会得到
ObjectDisposedException

显然,我无法检验这个理论

看看你是否能复制粘贴这一个并获得好的结果:

byte[] contents = File.ReadAllBytes(filename);

我看不出有任何理由说明这些方法不起作用,除非你的
int
溢出。

可能当你的
文件流
正在使用时,你的
文件流
会抛出
IOException
,由于数组未初始化,您将获得
ObjectDisposedException

显然,我无法检验这个理论

看看你是否能复制粘贴这一个并获得好的结果:

byte[] contents = File.ReadAllBytes(filename);

我看不出为什么这些方法不起作用-除非你有
int
溢出。

为什么要创建一个GetFile方法?@thomasleveque:好吧,如果文件正在使用,只是为了管理异常。。这是我在这里看到的唯一原因…@Marco忘了提到Im使用Compact Framework,所以我不能使用ReadAllBytes。为什么要创建一个GetFile方法呢?@ThomasLevesque:好吧,只是为了在使用文件时管理异常。。这是我在这里看到的唯一原因…@Marco忘了提到Im使用Compact Framework,所以我不能使用ReadAllBytes。忘了提到Im使用Compact Framework,所以我不能使用ReadAllBytes。忘了提到Im使用Compact Framework,所以我不能使用ReadAllBytes。复制粘贴它,但仍然得到相同的结果…这一行导致:binFile=新字节[binReader.BaseStream.Length];您试图读取的文件有多大?我在代码中看到的唯一小问题是
BaseStream.Length
是一个
long
,需要转换为
int
。你的档案太大了吗?“你的档案太大了吗?”-是的,我想是的!我想这个问题在我把它转换成整数后就解决了。谢谢!复制粘贴了它,但仍然得到相同的结果…这一行导致它:binFile=newbyte[binReader.BaseStream.Length];您试图读取的文件有多大?我在代码中看到的唯一小问题是
BaseStream.Length
是一个
long
,需要转换为
int
。你的档案太大了吗?“你的档案太大了吗?”-是的,我想是的!我想这个问题在我把它转换成整数后就解决了。谢谢!