怎么获取文件的二进制流? 150

我只要将某个文件的二进制流赋给一个数组。。用c++最好直接给代码。。ifstreaminfile("c:\\1.txt",ios::binary);infile.read... 我只要将某个文件的二进制流赋给一个数组。。
用c++ 最好直接给代码。。
ifstream infile("c:\\1.txt",ios::binary);
infile.read((unsigned char *)&stud[0],N);
infile.close(); //打开文件
怎么让数组stud[]为文件的二进制流
展开
 我来答
邗韫iz
2009-02-18 · TA获得超过302个赞
知道答主
回答量:389
采纳率:0%
帮助的人:0
展开全部
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class FolderContent {
/**
* 获得文件内容
* @param fileName
* @return
* @throws Exception
*/
public static byte[] getFileContent(String fileName) throws Exception{
File file = new File(fileName);
if( file.exists() ){
InputStream is = new BufferedInputStream(new FileInputStream(file));
byte[] b = new byte[1024];
int len = -1;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while ( (len = is.read(b, 0, b.length)) != -1) {
baos.write(b, 0, len);
}
baos.flush();
is.close();

return baos.toByteArray();
}

return null;
}

private int getFileContent(ByteArrayOutputStream baos,File file) throws Exception{
InputStream is = new BufferedInputStream(new FileInputStream(file));
byte[] b = new byte[1024];
int len = -1,fileLen = 0;
while ( (len = is.read(b, 0, b.length)) != -1) {
baos.write(b, 0, len);
fileLen += len;
}
baos.flush();
is.close();

return fileLen;
}

public byte[] getFolderContent(String folderName) throws Exception{
File folder = new File(folderName);
if( !folder.exists() ){
throw new Exception("文件不存在。");
}
if( !folder.isDirectory() ){
throw new Exception("文件不是目录。");
}

ByteArrayOutputStream baos = new ByteArrayOutputStream();

File[] files = folder.listFiles();
for( int i=0; i <files.length; i++ ){
if(!files[i].isDirectory()){
int fileLen = this.getFileContent(baos, files[i]);
System.out.println("加载了文件:"+files[i].getAbsolutePath()+"的数据,长度:"+fileLen);
}
}

return baos.toByteArray();
}

public static void main(String[] args) throws Exception{
FolderContent content = new FolderContent();
byte[] data = content.getFolderContent("d:/");
System.out.println(data.length);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友96ffcf7
推荐于2017-10-11 · 知道合伙人互联网行家
百度网友96ffcf7
知道合伙人互联网行家
采纳数:22721 获赞数:118720
从事多年网络方面工作,有丰富的互联网经验。

向TA提问 私信TA
展开全部

由于char是有符号的,因此在使用unsigned short进行转化的时候,也会出现问题。可以改为下面的代码。

ifstream fin;  
    fin.open("data_batch_1.bin",ios::binary);  
    if(!fin){  
        cout<<"open error!"<<endl;  
        return -1;  
    }  
    char buffer[3073];  
    fin.read(buffer,3073*sizeof(char));  
    for(int i=0;i<17;i++){  
        unsigned char tmp=(unsigned char)buffer[i];  
        cout<<(unsigned short)tmp<<endl;  
    }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1045614ead
2009-02-18 · TA获得超过1510个赞
知道小有建树答主
回答量:497
采纳率:0%
帮助的人:439万
展开全部
打开文件时,加上ios_base::binary标识。
这个标志的作用是抑制底层系统服务对文件内容进行的自动转换。
例如:
of << "hello\n";
如果未加binary标识,在win32系统里,输出的是"hello\r\n",
系统会把"\n"转换成"\r\n"。
如果加了binary标识,输出的就是"hello\n",一共6个字符。
不会进行转换。

2.读写二进制数据,应该用read()、write()等函数。
>>、<<操作会进行格式化,把数据转换成字符串。这与打开文件
时是否加了binary标识无关。
例如:
float pi = 3.14159;
of.write(&a, sizeof(a));
在32位系统里,输出的是4个字节,pi的float表示。
of >> pi;
输出的是字符串"3.14159",无论打开文件时是否加了binary标识
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式