首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

Stream 如何操作呢?一直出错

2013-07-26 
Stream 怎么操作呢?一直出错string file @C:\Users\Administrator\Desktop\明星证件照\陈好.jpgStream

Stream 怎么操作呢?一直出错



            string file= @"C:\Users\Administrator\Desktop\明星证件照\陈好.jpg";
            Stream stream = Stream.Null;
            using (var fs = File.Open(file, FileMode.Open))
            {
                stream = fs;
            } 

            uploadPartRequest.InputStream = stream;
            ossClient.UploadPart(uploadPartRequest); //出错:Cannot access a closed file

没接触过文件流,想问这应该怎么操作?
[解决办法]
打开完 要关闭的
[解决办法]
Cannot access a closed file :这个你猜也猜的到吧.
   using (var fs = File.Open(file, FileMode.Open))
            {
                stream = fs;
            } 
你把流关闭了,所以后面报错了. 
[解决办法]
StreamReader sr = new StreamReader(file);  File.Open  和 Stream是不一样的一个是打开文件 一个是打开文件流,一个是真实打开文件 一个并没有打开文件  要读取图片的文件流的话可以这么写
FileStream fs = null;byte[] buffer = null;try{    if (File.Exists(file)) //图片文件的全路径字符串    {       fs = new FileStream(file, FileMode.Open);       buffer = new byte[fs.Length];       fs.Read(buffer, 0, int.Parse(fs.Length.ToString()));       fs.Close();       fs.Dispose();    }}catch{     fs.Close();     fs.Dispose();}return buffer;//图片文件的流 


[解决办法]

FileStream fs = null;
byte[] buffer = null;
try{    
if (File.Exists(file)) //图片文件的全路径字符串    
{       
fs = new FileStream(file, FileMode.Open);       
buffer = new byte[fs.Length];       
fs.Read(buffer, 0, int.Parse(fs.Length.ToString()));       
fs.Close();       
fs.Dispose();    
}
}catch{     
fs.Close();     
fs.Dispose();
}
return buffer;//图片文件的流

[解决办法]
uploadPartRequest.InputStream = fs;             ossClient.UploadPart(uploadPartRequest);  这个需要的话 写在第8行后面 
[解决办法]
引用:
Quote: 引用:

Cannot access a closed file :这个你猜也猜的到吧.
   using (var fs = File.Open(file, FileMode.Open))
            {
                stream = fs;
            } 
你把流关闭了,所以后面报错了. 
我关闭啦,什么stream.close().fs.close(). 不管用啊


看提示的话,不应该关吧,提示的错误是Cannot access a closed file,无法获取已经关闭的文件,楼主是不是把文件关闭之后又对文件进行操作了?看看ossClient.UploadPart(uploadPartRequest)里有这种操作没
[解决办法]
uploadPartRequest.InputStream = fs;   这一步我想不需要了  这是为了将字符串转为文件流,后面那句是做什么的呢? ossClient.UploadPart(uploadPartRequest);   这个方法怎么样的能看下么
[解决办法]
Using作用域结束后,就会释放它定义的对象,所以关闭了
把 你的逻辑写在Using 作用域里面
大概改成这样试试

            string file = @"C:\Users\Administrator\Desktop\明星证件照\陈好.jpg";
            using (FileStream stream = new FileStream(file,FileMode.Open))
            {


                uploadPartRequest.InputStream = stream;
                ossClient.UploadPart(uploadPartRequest);
            }


[解决办法]
           using (var fs = File.Open(file, FileMode.Open))
            {
                stream = fs;
            } 
            上边执行完 filestream已经关闭了 
再执行下边的语句是不行的啊
            uploadPartRequest.InputStream = stream;

把下边的代码移到 using作用域中
或去掉using 手动释放资源
[解决办法]
建议查查using是干嘛的

[解决办法]
把using搞清楚就行了。
[解决办法]
意思是不让你关闭
[解决办法]
晕...初学者一般都不会用 using的...你知道using是什么歌样子的么...不懂也用...
看我这个链接...
Using
using 是用于实现 IDispose 接口的...
[解决办法]
引用:
晕...初学者一般都不会用 using的...你知道using是什么歌样子的么...不懂也用...
看我这个链接...
Using
using 是用于实现 IDispose 接口的...

同意
[解决办法]
using 表示在结束的时候会回收块内的内存,就是释放掉所占用的资源,也就是说,你的fs在using块之后已经释放掉了
[解决办法]
大致是这样的

var buffer= new Byte[409600];
stream = new MemoryStream();
using (var fs = File.Open(file, FileMode.Open))
{
    var len =0 ;
    while((len= fs.Read(buffer, 0, buffer.Length))>0)
        stream.Write(buffer, 0, len);


如果考察一个学生有没有在学校里学过这类代码,那么就问它“如何在两个stream之间拷贝数据”这个题目就行了!
------解决方案--------------------


这个跟Using其是没有非常直接的关系,只有间接关系。lz的代码,明显地它是想问“stream怎么拷贝数据”,否则它就不会额外地声明一个stream变量,而直接把fs变量赋值给 uploadPartRequest.InputStream 就行了。
[解决办法]

引用:
Using作用域结束后,就会释放它定义的对象,所以关闭了
把 你的逻辑写在Using 作用域里面
大概改成这样试试

            string file = @"C:\Users\Administrator\Desktop\明星证件照\陈好.jpg";
            using (FileStream stream = new FileStream(file,FileMode.Open))
            {
                uploadPartRequest.InputStream = stream;
                ossClient.UploadPart(uploadPartRequest);
            }


是可以这样的。

不过在大规模并发测试中,这通常会出错。因为我们难以肯定UploadPart方法可以瞬间就结束。

热点排行