📄 locku.cpp
字号:
//开始执行
/////////////////////////////////////////////////////////////
fread(byte_bufs,8,1,OriginFileP);
while( (len<ObjectFileLen) && (!feof(OriginFileP)) )
{ //将位图阵列每字节的最低位重新组合为被隐藏文件的字节
byte_buf=0;
for(i=0;i<8;i++)
{
if( (byte_bufs[i] & 1) == 1)
byte_buf|=mask[i];
}//end for
byte_buf^=Password[j];
fputc(byte_buf,TempFileP);
len++;
j++;
if(j>=PasswordLen) j=0;
fread(byte_bufs,8,1,OriginFileP);
ProgressBar1->StepIt();
Application->ProcessMessages();
if(Stop) return false;
}//end while
return false;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TMainForm::RunBitClick(TObject *Sender)
{
//////////////////////////////////////////////////////////////////////////
//主控程序
if( MessageDlg("确定要执行\""+RadioGroup1->Items->Strings
[RadioGroup1->ItemIndex]+"\"吗?",mtConfirmation,
TMsgDlgButtons()<<mbOK<<mbCancel,0)==mrOk){
Memo1->Clear();
Memo1->Lines->Add("操作方式选择:"+RadioGroup1->Items->
Strings[RadioGroup1->ItemIndex]);
}
else
return;
////////////加密各项操作方式初始化
//检查原文件是否存在和目标文件名是否为空
//获得文件全路径,如果为空
//ShowMessage(OriginFileName);测试成功,OriginFileName为空
//设置当前工作目录为DirectoryListBox1->Directory,无用->有用
SetCurrentDir(DirectoryListBox1->Directory);
OriginFileName=ExpandFileName(FromFile->Text);//获取目标文件全路径
//////////如果打开原文件失败
if(OriginFileName.IsEmpty()){//文件名为空请示输入文件名
MessageDlg("请先输入原文件名!",mtError,
TMsgDlgButtons()<<mbOK,0);
FromFile->SetFocus();
return;
}
if(!FileExists(OriginFileName)){//文件不存在
MessageDlg("原文件\""+OriginFileName+"\"不存在",mtError,
TMsgDlgButtons()<<mbOK,0);
FromFile->SetFocus();
return;
}
//设置当前工作目录为DirectoryListBox2->Directory,无用->有用
SetCurrentDir(DirectoryListBox2->Directory);//
ObjectFileName=ExpandFileName(ToFile->Text);//获取目标文件全路径
//如果目标文件为空,提示创建新文件
if(ObjectFileName.IsEmpty()){
MessageDlg("请先输入目标文件名!",mtWarning,
TMsgDlgButtons()<<mbOK,0);
ToFile->SetFocus();
return;
}
//打开原文件
if( (OriginFileP= fopen(OriginFileName.c_str(),"rb") )==NULL){
MessageDlg("不能打开原文件\""+OriginFileName+"\"",mtError,
TMsgDlgButtons()<<mbOK,0);
FromFile->SetFocus();
return;
}
if(ExtractFileName(ObjectFileName).IsEmpty()) {
MessageDlg("请输入文件名!",mtWarning,TMsgDlgButtons()<<mbOK,0);
fclose(OriginFileP);
return;
}
if( RadioGroup1->ItemIndex!=2){
AnsiString Path=ExtractFilePath(ObjectFileName);
AnsiString Dir=ExtractFileDir(ObjectFileName);
if(chdir(Path.c_str())){
int Result=MessageDlg("路径\""+Path+"\"不存在,是否创建该目录?",
mtWarning,TMsgDlgButtons()<<mbYes<<mbNo<<mbCancel,0);
switch(Result){
case mrYes:
while(chdir(Dir.c_str()) ){
Dir=ExtractFileDir(Dir);
}
do{
Dir=Dir+ObjectFileName.SubString( Dir.Length()+1,
Path.SubString( Dir.Length()+1,Path.Length() ).Pos('\\') );
mkdir(Dir.c_str());
}while(!(Dir==Path));
DirectoryListBox2->Directory=Dir;
DirectoryListBox2->Update();
break;
case mrNo: ToFile->SetFocus();
case mrCancel: fclose(OriginFileP);return;
}
}
}
/*if(!FileExists(ObjectFileName)){
MessageDlg("目标文件\""+ObjectFileName+"\"不存在",mtError,
TMsgDlgButtons()<<mbOK,0);
ToFile->SetFocus();
return;
}*/
//获取文件长度
findfirst(OriginFileName.c_str(),&ff,0);
OriginFileLen=ff.ff_fsize;
findfirst(ObjectFileName.c_str(),&ff,0);
ObjectFileLen=ff.ff_fsize;
//创建临时文件名改原文件扩展名为"tmp"
TempFileName=ObjectFileName+".tmp";
////////////////////////////////////////////////////////////////
//调用各项功能
////////////如果确定密码,开始执行加密程序初始化,否则返回
if(!GetPassword())return;
bool ErrorReturn;
//StopBit->Enabled=true;
RunBit->Enabled=false;
switch(RadioGroup1->ItemIndex){
case 0: ErrorReturn=DirectPut(); break;
case 1: ErrorReturn=DirectGet(); break;
case 2: ErrorReturn=AddToBmp24(); break;
case 3: ErrorReturn=ExtFromBmp24();break;
}
//StopBit->Enabled=false;
RunBit->Enabled=true;
/////////////////////////////////////////////////////////////////
//收尾工作,释放变量所占用的内存
fclose(OriginFileP);
fclose(ObjectFileP);
fclose(TempFileP);
if(ErrorReturn){
Memo1->Lines->Add("执行失败");
return;
}
delete Password; //也就是说初始化未成功,直接返回
delete CoolWord; //否则删除指针变量,继续执行
ProgressBar1->Position=0;
/////////判断是用户停止还是正常执行完毕
if(Stop){//如果是用户停止操作删除临时的文件
StatusBar1->Panels->Items[0]->Text="用户停止";
DeleteFile(TempFileName);
Memo1->Lines->Add("用户停止");
return;
}
else {//删除原文件//将临时文件改名为原文件
DeleteFile(ObjectFileName);
RenameFile(TempFileName,ObjectFileName);
StatusBar1->Panels->Items[0]->Text="成功";
}
/////////////////////////加密完毕,更新目录文件
if(DriveComboBox2->Drive != OriginFileName[1]){
DriveComboBox2->Drive=OriginFileName[1];
DriveComboBox1->Update();
}
if(DirectoryListBox1->Directory!=ExtractFileDir(OriginFileName)){
DirectoryListBox1->Directory=ExtractFileDir(OriginFileName);
DirectoryListBox1->Update();
}
/*if(FileListBox1->FileName!=OriginFileName){
FileListBox1->FileName=OriginFileName;
}*/
//因为可能创建了一个新的目标文件
FileListBox1->Update();
if(DriveComboBox2->Drive!=ObjectFileName[1]){
DriveComboBox2->Drive=ObjectFileName[1];
DriveComboBox2->Update();
}
if(DirectoryListBox2->Directory!=ExtractFileDir(ObjectFileName)){
DirectoryListBox2->Directory=ExtractFileDir(ObjectFileName);
DirectoryListBox2->Update();
}
/*if(FileListBox2->FileName!=ObjectFileName){
FileListBox2->FileName=ObjectFileName;
FileListBox2->Update();
}*/
FileListBox2->Update();
///////////////////获取目标文件长度
findfirst(OriginFileName.c_str(),&ff,0);
OriginFileLen=ff.ff_fsize;
findfirst(ObjectFileName.c_str(),&ff,0);
ObjectFileLen=ff.ff_fsize;
//////////////////////////////////显示加密信息
Memo1->Lines->Add("原始文件: "+OriginFileName+" "
+FormatFloat((AnsiString)"#,##0'KB '",OriginFileLen/1024)
+FormatFloat((AnsiString)"(#,##0' 字节)'",OriginFileLen));
Memo1->Lines->Add("目标文件: "+ObjectFileName+"\t"
+FormatFloat((AnsiString)"#,##0'KB '",ObjectFileLen/1024)
+FormatFloat((AnsiString)"(#,##0' 字节)'",ObjectFileLen));
//获取本地当前时间
time_t t;
struct tm *mt;//定义一个tm型指针
t=time(NULL);//
mt=localtime(&t);//把r转化为tm结构
AnsiString Time;
Time=AnsiString(mt->tm_year+1900)+"-"+AnsiString(mt->tm_mon+1)
+"-"+AnsiString(mt->tm_mday)+" "+AnsiString(mt->tm_hour)
+":"+AnsiString(mt->tm_min)+":"+AnsiString(mt->tm_sec);
Time=StatusBar1->Panels->Items[0]->Text+": "+Time;
Memo1->Lines->Add(Time);
Memo1->SelStart=0;
Memo1->SelLength=0;
/////////////////////////////////////////////////////////////////
//终于搞定了
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::StopBitClick(TObject *Sender)
{
if(ProgressBar1->Position!=0){
if(MessageDlg("放弃本次的操作吗?",mtConfirmation,
TMsgDlgButtons()<<mbYes<<mbNo,0)==mrYes){
Stop=true;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::SpeedButton1Click(TObject *Sender)
{
HelpForm=new THelpForm(Application);
HelpForm->ShowModal();
delete HelpForm;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::NewFolderBitClick(TObject *Sender)
{
if(NewFolderDlg->ShowModal()==mrOk){
SetCurrentDir(DirectoryListBox2->Directory);
if(!CreateDir(NewFolderDlg->NewFolder->Text)){
//如果创建目录出错,提示后返回
MessageDlg("创建目录出错!",mtError,TMsgDlgButtons()<<mbOK,0);
return;
}
DirectoryListBox2->Update();
DirectoryListBox1->Update();
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::Timer1Timer(TObject *Sender)
{
StatusBar1->Panels->Items[0]->Text=
StatusBar1->Panels->Items[0]->Text+".";
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FileListBox1Click(TObject *Sender)
{
FromFile->Text=FileListBox1->FileName;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FileListBox2Click(TObject *Sender)
{
ToFile->Text=FileListBox2->FileName;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ComboBox1Change(TObject *Sender)
{
FileListBox1->Mask=ComboBox1->Text;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ComboBox2Change(TObject *Sender)
{
FileListBox2->Mask=ComboBox2->Text;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ExitBitClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::RadioGroup1Click(TObject *Sender)
{
switch(RadioGroup1->ItemIndex){
case 0:
case 1:
ComboBox1->ItemIndex=2;
ComboBox2->ItemIndex=2;
FileListBox1->Mask="*.*";
FileListBox2->Mask="*.*";
break;
case 2:
ComboBox1->ItemIndex=2;
ComboBox2->ItemIndex=1;
FileListBox1->Mask="*.*";
FileListBox2->Mask="*.BMP";
break;
case 3:
ComboBox1->ItemIndex=1;
ComboBox2->ItemIndex=2;
FileListBox1->Mask="*.BMP";
FileListBox2->Mask="*.*";
break;
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::RefreshBitClick(TObject *Sender)
{
DirectoryListBox1->Update();
DirectoryListBox2->Update();
FileListBox1->Update();
FileListBox2->Update();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FileListBox1DblClick(TObject *Sender)
{
if(!CurrentFLB->FileName.IsEmpty())
{
OleContainer1->CreateLinkToFile(CurrentFLB->FileName,false);
OleContainer1->DoVerb(0);
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FileListBox1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
CurrentFLB=(TFileListBox *)Sender;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::OpenClick(TObject *Sender)
{
OleContainer1->CreateLinkToFile(CurrentFLB->FileName,false);
OleContainer1->DoVerb(0);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::DeleteClick(TObject *Sender)
{
if( (MessageDlg("文件\""+CurrentFLB->FileName+"\"将被永久删除,继续吗?",
mtWarning,TMsgDlgButtons()<<mbOK<<mbCancel,0))==mrOk){
DeleteFile(CurrentFLB->FileName);
FileListBox1->Update();
FileListBox2->Update();
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::PopupMenu1Popup(TObject *Sender)
{
if(CurrentFLB->FileName.IsEmpty()){
Open->Enabled=false;
Delete->Enabled=false;
}
else{
Open->Enabled=true;
Delete->Enabled=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCloseQuery(TObject *Sender, bool &CanClose)
{
//当正在执行时询问是否中止当前的操作
if(ProgressBar1->Position!=0){
if(MessageDlg("放弃本次的操作吗?",mtConfirmation,
TMsgDlgButtons()<<mbYes<<mbNo,0)==mrYes){
fclose(OriginFileP);
fclose(ObjectFileP);
fclose(TempFileP);
DeleteFile(TempFileName);
delete Password; //也就是说初始化未成功,直接返回
delete CoolWord; //否则删除指针变量,继续执行
Stop=true;
}
else CanClose=false;
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FromFileKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key==0x0D)RunBitClick(Sender);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -