我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确实一个非常大的随机数,我又纳闷了,谁教教我~~~