读书人

以二进制读取文件然后按位取反最后生成

发布时间: 2012-04-20 15:27:03 作者: rapoo

以二进制读取文件然后按位取反最后生成新文件
我是学生,最近对这个比较感兴趣,想想这样可以加密文件了,因为是bcb初学者,自学的,是用fileopen();函数吗?
然后读取 -》取反-》filecreate()-》filewrite()最后再关闭文件么?

谁会的帮帮我好吗,最好给个简单的实例,谢谢


[解决办法]
void reverseFile(String f)
{
TFileStream * fs=new TFileStream(f,fmOpenReadWrite|fmShareDenyNone);
while (fs->Position<fs->Size)
{
char c;
fs->Read(&c,1);
c^=0xff; // 取反
fs->Position=fs->Position-1;
fs->Write(&c,1);
}
delete fs;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
reverseFile("d:\\test.txt");
}

取反忘了


[解决办法]

C/C++ code
// bcbvoid __fastcall FtoF(AnsiString inFile, AnsiString outFile, char ch){    int inFileH = FileOpen(inFile, fmOpenRead);    int outFileH = FileCreate(outFile);    const int bufSize  = 1024*1024; // 1M, 此处改为1,你试验一下就知道每次1Byte和1MByte的区别    char *buf = new char [bufSize];    int readSize;    while (true)    {        readSize = FileRead(inFileH, buf, bufSize);        if (readSize > 0)        {            for (int i=0; i<readSize; i++)                   *(buf + i) ^= ch;            FileWrite(outFileH, buf, readSize);            if (readSize < bufSize)                break;        }        else            break;    }    FileClose(inFileH);    FileClose(outFileH);    delete []buf;}
[解决办法]
C/C++ code
#include <windows.h>#include <stdio.h>#include <iostream.h>#include <fstream.h>//cvoid FtoF(const char * inFile, const char * outFile, char ch){     ifstream inputFile( inFile , ios::in | ios::binary /*| ios::nocreate */);     if ( inputFile.fail())return false;     inputFile.seekg( 0, ios::end );     long fileSize = inputFile.tellg();     inputFile.seekg( 0, ios::beg );     char *pBuffer = new char[fileSize];     inputFile.read( pBuffer, fileSize );     inputFile.close();     for (int i=0; i<fileSize; i++)                   *(pBuffer + i) ^= ch;     ofstream outfile( outFile, ios::out  | ios::binary| ios::trunc );     outfile.write(pBuffer, fileSize);     outfile.close();     delete []pBuffer;} 

读书人网 >C++ Builder

热点推荐