怎么获取文件的二进制流? 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[]为文件的二进制流 展开
用c++ 最好直接给代码。。
ifstream infile("c:\\1.txt",ios::binary);
infile.read((unsigned char *)&stud[0],N);
infile.close(); //打开文件
怎么让数组stud[]为文件的二进制流 展开
3个回答
展开全部
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);
}
}
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);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2017-10-11 · 知道合伙人互联网行家
关注
展开全部
由于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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
打开文件时,加上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标识
这个标志的作用是抑制底层系统服务对文件内容进行的自动转换。
例如:
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标识
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询