导航:首页 > 文件教程 > filestream读取大文件

filestream读取大文件

发布时间:2022-07-06 19:25:50

A. 如何读取大文件

visual c++ 如何:读取二进制文件 下面的代码示例演示如何从文件中读取二进制数据。使用了 system.io 命名空间中的两个类:filestream 和 binaryreader。filestream 表示实际的文件。binaryreader 为允许二进制访问的流提供接口。 下面的代码示例使用由如何:编写二进制文件中的代码创建的称为 data.bin 的文件。 示例 // binary_read.cpp // compile with: /clr #using<system.dll> using namespace system; using namespace system::io; int main() { string^ filename = "data.bin"; try { filestream^ fs = gcnew filestream(filename, filemode::open); binaryreader^ br = gcnew binaryreader(fs); console::writeline("contents of {0}:", filename); while (br->basestream->position < br->basestream->length) console::writeline(br->readint32().tostring()); fs->close( ); } catch (exception^ e) { if (dynamic_cast<filenotfoundexception^>(e)) console::writeline("file '{0}' not found", filename); else console::writeline("exception: ({0})", e); return -1; } return 0; } ★★补充★★ 手上的一个vb项目(过程中发现,.net果然是好啊),需要在一个activex中实现http下载功能, 是采用internetreadfile这个api来实现,一开始的代码 是这么写的 function gethttpdownload(surl as string) as boolen dim s as string dim hopen as long dim hopenurl as long dim bdoloop as boolean dim bret as boolean dim sreadbuffer as string * 2048 dim lnumberofbytesread as long hopen = internetopen(scuseragent, internet_open_type_preconfig, vbnullstring, vbnullstring, 0) hopenurl = internetopenurl(hopen, surl, vbnullstring, 0, internet_flag_reload, 0) bdoloop = true do while bdoloop sreadbuffer = vbnullstring bret = internetreadfile(hopenurl, sreadbuffer, len(sreadbuffer), lnumberofbytesread) s = s & left$(sreadbuffer, lnumberofbytesread) if not cbool(lnumberofbytesread) then bdoloop = false loop filename = "e:\bitspirit\torrent\121212.torrent" f1 = freefile open filename for binary as f1 put f1, , s close f1 if hopen <> 0 then internetclosehandle (hopen) gethttpdownload = true end function 上面方法,用来获取服务器上的文本类型的文件一点问题,都没有,但是用来下载二进制文件的时候 就出现问题了,里面的数据怎么也不对,研究了下载下来的文件后发现,问题外话应该是在接收数据的变量是个string的定长字符串上。但是在网上查了好久,甚至m$ msdn上的一个用vb来实现下载的程也是用 string类型来接收数据的而且网上的代码写法,基本上也都是这个样,好来才好现,都是从msdn上的哪个例程上演变过来的. 想如果能用一个byte数组来代替定长字符串,哪可能就没有问题了,但是查看了一个vb 对internetreadfile的申明 public declare function internetreadfile lib "wininet.dll" (byval hfile as long, byval sbuffer as string, byval lnumbytestoread as long, lnumberofbytesread as long) as integer 发现其定义byval sbuffer as string 看来只能用string了,在网上查找过程中,发现人家用vc写的程序中这人参数可以是其它的,所以查看了一下internetreadfile的原型。发现的确可以, 所以 把internetreadfile的定义修改了一下,为了通用, 为新的internetreadfile定义了一个别名。internetreadfilebyte申明如下: public declare function internetreadfilebyte lib "wininet.dll" alias "internetreadfile" (byval hfile as long, byref sbuffer as byte, byval lnumbytestoread as long, lnumberofbytesread as long) as integer 试了一下的确可以,重新修改函数,(在这过程中发现,如果要取到正确数据,还必须取得文件大小。所以增加了httpqueryinfo的定义)最后完整的函数 function filedownload(surl as variant) as boolean dim b(99) as byte dim endbyte() as byte dim s as string dim hopen as long dim hopenurl as long dim bdoloop as boolean dim bret as boolean dim bbuffer as byte dim sreadbuffer as string dim filename as string dim lnumberofbytesread as long dim f1 as integer dim strsize as string dim size as long strsize = string$(1024, " ") f1 = freefile sttotal = vbnullstring filename = "e:\bitspirit\torrent\121212.torrent" open filename for binary as f1 hopen = internetopen(scuseragent, internet_open_type_preconfig, vbnullstring, vbnullstring, 0) hopenurl = internetopenurl(hopen, surl, vbnullstring, 0, internet_flag_reload, 0) bdoloop = true httpqueryinfo hopenurl, http_query_content_length or http_query_flag_number, byval strsize, len(strsize), 0 size = clng(trim(strsize)) for j = 1 to size \ 100 bdoloop = internetreadfilebyte(hopenurl, b(0), 100, lnumberofbytesread) put f1, , b if not cbool(lnumberofbytesread) then exit for next if size mod 100 <> 0 then tmp = (size mod 100) - 1 redim endbyte(tmp) bdoloop = internetreadfilebyte(hopenurl, endbyte(0), tmp + 1, lnumberofbytesread) put f1, , endbyte end if if hopenurl <> 0 then internetclosehandle (hopenurl) if hopen <> 0 then internetclosehandle (hopen) close #1 filedownload = true end function 测试了一下,完全成功:)

B. 初学delphi,看到tony的FastFileStream,用于大文件快速读取,但不知如何调用,哪位大侠提供一个示例

这个东西用法跟普通的filesystem差不多,你搜索一下filesystem用法就知道了,比如说从一个文件中第四个字节开始读取8个字节至数组,其它的象seek、write之类的方法也类似于filesystem

var
buffer:array[0..7]ofchar;
f1:TFastFileStream;
begin
f1:=TFastFileStream.Create('e:mongodb-win32-x86_64-2.2.2.zip');
f1.Position:=4;
f1.Read(buffer,sizeof(buffer));
f1.Free;
showmessage('yes');
end;

C. C#FileStream循环读取大文件有什么好处

虽然是在 while 循环内实现读写,但不能说是循环读取(循环读取说的是读到尾后有从头读),而是分段读取
分段读取可以减少缓存空间的内存开销,合适的缓存空间可提高硬盘的寻道效率

D. FLEX里面利用FileStream类来读取文件夹里面文件的问题

有其他语言获得数据在穿给flex
这个不是几句话说的清楚的
我给你一个php的方法
用amfphp
你可以看这个

http://wenku..com/view/df20191c59eef8c75fbfb346.html

E. 如何将filestream读取某文件的数据放到一个byte[]中

byte[] basicbyte = File.ReadAllBytes("1.txt");

F. C# 读取文件的问题:file类的ReadAllText、WriteAllText与流Filestream的关系

我们看不到。net Framework 的源代码抄,但猜测ReadAllText()基本上应该也是用Filestream的read方式实现的。多一个方法就可以让你少写很多行的代码,不用处理Filestream的Dispose。这就是写library的人比较聪明之处吧。

当然具体比较两个方法,ReadAllText()是一个简单的方法,你一次读出所有的内容。而直接read Filestream,你有更多的控制,但也需要自己初始化Filestream,记得Dispose FileStream.

简单说吧,ReadAllText()像月票,Read 像每次坐车现买车票。

WriteAllText, 和 Write 方法和前面的一对类似。

G. C#中的FileStream类文件读取

把文件流里的内容放到集合里保存
然後再从集合中读取数据内容
用[]找到你所要读的行

H. c# Filestream 如何读取内嵌资源文件

内嵌后vs会为对应资源直接生成一个成员属性,如果文件是图片就返回图片类型,如果是其他不识别的文件就返回byte[] 类型
你直接调用即可,无需重新写读取方法

I. C#读取大容量Txt文件的问题

你这代码有几个问题:

首先,你这记录论“条”,实际的条数只是总字节数除ChunkSize的值,个人建议你这要是计数的是行数就更好了,这可以用StreamReader.ReadLine实现,如果你的文件10M,文件大小就是10*1024*1024,你的ChunkSize是102400,记录数自然是10*1024*1024/102400=102.4,你这142条记录应该有10M多一些,没什么不对的

其次,多线程输出到RichTextBox显然画蛇添足,反而会导致RichTextBox中的内容顺序跟文件可能不一致,因为开启多线程之后顺序是不一定的

第三,多线程开销是很大的,你这短时间内while循环那么多次就开启了大量的多线程,每个线程就给RichTextBox赋值这太浪费了

至于性能问题,跟其他几位说的一样,瓶颈在磁盘读写,你这多线程处理RichTextBox没什么意义

constlongChunkSize=102400;
byte[]bytcontent=newbyte[ChunkSize];
FileStreamfs=newFileStream(@"C:unintall.log",FileMode.Open);
inti=0;
while(fs.Read(bytcontent,0,bytcontent.Length)>0)
{
i++;
Console.Write(System.Text.Encoding.Default.GetString(bytcontent));
}
Console.WriteLine("共有:"+i+"条记录!");

下面是ReadLine的

using(StreamReadersr=newStreamReader(@"C:unintall.log",System.Text.Encoding.Default))
{
while(sr.Peek()>=0)
{
Console.WriteLine(sr.ReadLine());
}
}

参考

https://msdn.microsoft.com/zh-cn/library/system.io.streamreader.readline.aspx

阅读全文

与filestream读取大文件相关的资料

热点内容
永恒185分钟未删减版bt泰国 浏览:27
粤语电影粤视频网站 浏览:538
男主十几岁回到老家,外婆 浏览:200
数控编程中代码大全 浏览:185
日本国产爱情片。 浏览:536
双胞胎妍伊韩国电影 浏览:1000
怎么利用网络找人 浏览:639
重生之红军崛起 浏览:851
如何网络制码 浏览:626
大数据哪3v 浏览:873
网络五金店什么梗 浏览:646
从现代买物资到民国小说 浏览:879
dnf90版本徽章哪里打 浏览:140
iphone6发说说软件 浏览:725
简述java的事件处理机制 浏览:4
2803代码指什么 浏览:539
外国电影,有一女孩去的异能学校 浏览:61
男人喜欢看的电影网站 浏览:664
食物链女演员叫什么 浏览:978
好看又不收费的电影 浏览:418

友情链接