如何快速读取二进制文件

dim mybyte(100000) as byte
...
get #1,100000 ,mybyte()
...
能行吗?
朋友们有什么好办法?

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
测试了一下,完全成功:)
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-12-12
有些问题,纠正如下:
dim mybyte() as byte
...
aa=100000
bb=bb1
redim dim mybyte(aa)
seek bb
get #1, ,mybyte()
...
还要整置尾巴EOF(#1),否则过头。本回答被提问者采纳
第2个回答  2008-12-11
如果数据比较多,可以采用DMA的方式,你可以尝试修改操作系统的驱动,使得当你写的应用软件发出请求时,能第一时间为你服务。
第3个回答  2008-12-11
while(1){
if( bitLeft <= 0 ){
cByte = *inP++;
bitLeft = 8;
}
code = ( cByte >> ( 8 - bitLeft ) );

while( cSize > bitLeft )
{
cByte = *inP++;
code |= ( cByte << bitLeft );
bitLeft += 8;
}
bitLeft -= cSize;
code &= code_mask[cSize];
........
}

其中cSize表示码的长度(如10),从inP中读数据到一个code
第4个回答  2008-12-11
用嘴巴读,谢谢

如何快速读取二进制文件
快速读取二进制文件的方法如下:1、打开文件。打开文件可以有两种方式,第一种可以使用fstream类的构造函数。fstream file("test.dat",ios_base::in|ios_base::out|ios_base::app); 另外一种方法就是使用 open函数。fstream file;file.open("test.dat",ios_base::in|ios_base::out|ios_base::...

二进制文件的读取与写入使用方法
读取二进制文件通常需要一个二进制文件读取器,它可以按字节或按块读取文件。写入二进制文件则需要一个二进制文件写入器,它可以按字节或按块写入数据。在实际操作中,我们需要打开二进制文件,并使用相应的读取或写入函数来读取或写入数据。读取二进制文件时,我们需要将读取的数据转换为相应的数据类型,如...

可以使用记事本打开二进制的文件吗?
对于二进制文件,应该使用专门设计的软件或工具来打开和查看。例如,图像文件应该使用图像查看器打开,音频文件应该使用音频播放器打开,以此类推。这些工具知道如何正确解释二进制数据,并将其转换为人类可理解的形式。

求高手求解,怎么读取二进制文件 有一个整数文件(二进制文件),怎么读取...
用C++编译器,编一个代码,先把该二进制文件输入到内存,然后用cout流再把他从内存提取到显示器里就可以了。你说的是整数文件(十进制),那直接用“cout<<”就可以了,不过怎样编排,依情况而定。

c语言读取二进制数据文件
1、数据流:程序与数据间的交互是以流的形式进行。在C语言文件存取时,打开文件操作,关闭数据流。2、缓冲区:程序执行时,提供的额外内存以暂时存放数据。缓冲区作用是为了提高存取效率,内存的存取速度比磁盘快。3、文件类型:分为文本文件和二进制文件两种。补充:1、文本文件:字符编码的方式进行保存。

如何读取二进制文件
将文件以二进制模式打开,比如:fp=fopen("a.bin","rb");利用二进制文件读取函数读取数据,比如:fread(buffer,1,256,fp);关闭文件,fclose(fp);

如何查看二进制文件的文件内容?
1、百度搜索HexEditor.dll下载到本地,2、下载HexEditor.dll后,将插件HexEditor.dll放到notepad++安装目录的plugins目录下,3、在notepad++安装目录的plugins目录下才行,放入后需要重启软件。4、选择二进制文件后,右击,在弹出的菜单栏中选择Notepad++打开。5、这时可以看到二制文件为乱码,点击顶部菜单栏...

c#中,读二进制文件
如果单纯从文件里取内容的话,使用StreamReader最方便,该类对象有两个方法,ReadLine和ReadToEnd,前者一次只取一行,后者一次取得全部,你这种用后者即可,然后再用字符串分割函数Split("\\r\\nr ")就能返回一个以“回车换行,"r"和空格”分割的数组,数组中不包含分隔内容,但数组的第一个元素你需要判断...

如何查看二进制文件的文件内容
C++ 及 VB 指令突显,可同时编辑多个文件,而且即使开启很大的文件速度也不会慢。1、运行UltraEdit软件;2、菜单栏、文件、打开、选取一个二进制文件;3、打开这个文件;4、上图显示区域左侧是地址,中间部分是每个字节的16进制双字符表示,右侧区域显示是可见的单字节ASCII字符及双字节乱码。

c语言读取二进制数据文件
1、二进制文本使用fopen函数的二进制模式“rb”就可以打开。对于程序来说,不管后缀名如何,文件分为两种类型:文本文件和二进制文件。 C语言里有一系列文件操作函数。区分文本和二进制文件,需要在打开文件时设置不同的控制符mode的变量即可。2、fopen的函数原型:FILE * fopen(const char * path,const...

相似回答
大家正在搜