关于C++中文件读取的一个问题,100分急求答案

我C++学的不好,C++关于文件读取我知道一个方法,见下面的代码:
infile.unsetf(ios::skipws);
char ch;
while(infile>>ch)
outfile<<ch;
也就是一次一个字符的读取拉.但是我现在做的一个DES加密的程序要求一次完成对8个字节的加密和解密,定义是这样的:
char skey[8]; //密钥
char inbuff[8]; //输入
char oubuff[8]; //输出
要求是完成对文件的加密和解密,那么,我理解的是从源文件中读取8个字节的明文,加密之后把8个字节的密文输出到目的文件.那么,这应该如何做到的呢?
while(infile>>oubuff){

jm.Des_one(oubuff,inbuff, key, DECRYPT);

outfile<<inbuff;
}
这样是不行的.
请大侠们指教,因为明天晚上就要交,所以比较着急啊,我只要知道如何一次完成8个字节的读写就好了,谢谢啦:-)
相应的源代码我改成了这样:
char ch;
for(int i=0;i<=7;i++){
infile>>ch;
inbuff[i]=ch;
这样就对了,但是这样只能完成前8个字节的加密和解密,因此我想得到源文件的字节数目,这样可以继续往下读.我找到的得到文件长度的代码是:
long FileLen;
streampos begin = file.tellg(); //获得开头的位置
file.seekg(0, ios::end); //定位到文件尾部
streampos end = file.tellg(); //获得尾部的位置
file.close();
FileLen=end-begin; //利用streampos的"-"操作得到文件的字节长度
其中最后一句是不对的,我在调试状态下看到begin=0,end=40,但是FileLen确实一个非常大的随机数,我又纳闷了,谁教教我~~~

貌似方法好多的样子....

读的时候这样....

#include <fstream.h>

...

ifstream ins;
int i;
char iBuff[8];

if(!ins.open(FILENAME))return;

for(i=0;i<=7;i++)
{
iBuff[i]=ins.get();
}

写的时候用ofstream
ofstream::put(unsigned char)
也是每次写入一个字节...

------------------------------------------

貌似理解错了..

while(infile>>oubuff){
jm.Des_one(oubuff,inbuff, key, DECRYPT);
outfile<<inbuff;
}
这一段只要能连续每次读到8个字节就好了吧...
那既然infile>>ch成立,为什么不能infile>>oubuff[i]呢- -``
while的条件用文件结束标志判断...(infile.eof()?还是怎么写....infile是怎么定义的- -``)
....
于是 ...
while(!infile.eof())
{
for(int i=0;i<=7;i++)
infile>>oubuff[i];
}

说......其实我也不知道对不对- -```

---------------------------------

FileLen=end-begin;这句怎么会出问题呢- -``

那。。不取文件长度,直接while(!infile.eof())不行么?
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-07-01
有个read和getline方法可以读指定数目的字符,你试试,我记不清了。
第2个回答  2008-07-01
为何不行?
相似回答