以二进制读取文件然后按位取反最后生成新文件
我是学生,最近对这个比较感兴趣,想想这样可以加密文件了,因为是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");
}
取反忘了
[解决办法]
// 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;}
[解决办法]
#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;}