void __fastcall TfMain::FormClose(TObject *Sender, TCloseAction &Action) { TFile f; TStringList* sl = new(TStringList); for(int i = 0; i < lvLib->Items->Count; i++) sl->Add(lvLib->Items->Item[i]->SubItems->Strings[0] + '=' + lvLib->Items->Item[i]->SubItems->Strings[1] + '/' + lvLib->Items->Item[i]->SubItems->Strings[2]); sl->SaveToFile(ExtractFileDir(Application->ExeName) + "\\Library.lb"); sl->Clear(); sl->Add("Login="******"Pass="******"Pass="******"RememberPass=1"); else sl->Add("RememberPass=0"); sl->Add("Server=" + leServer->Text); sl->SaveToFile(ExtractFileDir(Application->ExeName) + "\\Settings.ini"); sl->~TStringList(); }
//--------------------------------------------------------------------------- void TRsyncConfigAdapter::SaveConfig(){ TStringList* lines = new TStringList(); TModuleHolder* currentModule = GetModuleHolder(GLOBAL_MODULE); for(int i = 0; i < currentModule->nvp->Count; i++){ lines->Add(currentModule->nvp->Strings[i]); } //Now get remaining modules for(int j = 0; j < modules->Count; j++){ currentModule = (TModuleHolder*)modules->Items[j]; if(currentModule->moduleName == GLOBAL_MODULE){ continue; } lines->Add("[" + currentModule->moduleName + "]"); for(int i = 0; i < currentModule->nvp->Count; i++){ lines->Add(currentModule->nvp->Strings[i]); } } lines->SaveToFile(CONFIG_FILE); delete lines; }
int _tmain(int argc, _TCHAR* argv[]) { seakgOutput *pOutput = 0; TStringList *list = new TStringList(); if (argc == 5) { pOutput = new seakgOutput_list(list); } else if (argc == 4) { pOutput = new seakgOutput_std(); } else { std::wcout << "usage: input_folder project_name prefix_id output_file\n"; std::wcout << "or usage: input_folder project_name prefix_id\n"; return -1; } // // output->Add("<add>"); pOutput->addline("<add>"); rootPath = UnicodeString(argv[1]); // L"C:\\Projects\\ACTApro.git"; projectName = UnicodeString(argv[2]); // L"ACTApro 2.0 (rev. )"; prefixforid = UnicodeString(argv[3]); g_nInc = 0; SearchAndScan(pOutput, rootPath); // output->Add("</add>"); pOutput->addline("</add>"); if (argc == 5) { UnicodeString outputFile = UnicodeString(argv[4]); list->SaveToFile(outputFile); } return 0; }
void HTMLDocument::SaveFile(const String &filename) { TStringList *sl = new TStringList; sl->Text = html; sl->SaveToFile(filename); delete sl; setchanged(false); }
void __fastcall TfrmMain::btn_item_saveClick(TObject *Sender) { TStringList *list = new TStringList(); for (int i = 0; i < list_filter->Count; i++) { list->Add((int)list_filter->Items->Objects[i]); } list->SaveToFile(String(LoginerPath) +"\\Data\\"+ GameAccount + "\\Items.dat"); delete list; }
//--------------------------------------------------------------------------- void __fastcall TFormMain::ExportCFileClick(TObject *Sender) { if (ExportDialog->Execute()) { TStringList* SL = new TStringList; __try { ChangeFileExt(ExtractFileName(ExportDialog->FileName), ""); SL->Add(Format("YETI_ROM rom_map_t %s = {", ARRAYOFCONST(( ChangeFileExt(ExtractFileName(ExportDialog->FileName), ""))))); SL->Add(Format("\"%s\",\"%s\",\"%s\",{", ARRAYOFCONST(( "Test Map", "Derek J. Evans", "Welcome to Yeti3D")))); for (int y = 0; y < YETI_MAP_HEIGHT; y++) { SL->Add("{"); for (int x = 0; x < YETI_MAP_WIDTH; x++) { cell_t* cell = &yeti->cells[y][x]; SL->Add(Format("{%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d},", ARRAYOFCONST(( cell->swi, cell->ent, cell->top, cell->mid, cell->bot, cell->lit, cell->wtx, cell->ttx, cell->mtx, cell->btx, 0, // Reserved 1 0 // Reserved 2 )))); } String S = SL->Strings[SL->Count - 1]; SL->Strings[SL->Count - 1] = S.SubString(1, S.Length() - 1); SL->Add("},"); } String S = SL->Strings[SL->Count - 1]; SL->Strings[SL->Count - 1] = S.SubString(1, S.Length() - 1); SL->Add("}};"); SL->SaveToFile(ExportDialog->FileName); } __finally { SL->Free(); } }
//--------------------------------------------------------------------------- void __fastcall TFormGrepStringsDialog::SaveToFile1Click(TObject *Sender) { // Salvar los renglones seleccionados a un archivo. TStringList *List = new TStringList(); if (List) { CreateStringListFormSelectRows(List, defALL); if (SaveDialog->Execute()) List->SaveToFile(SaveDialog->FileName); delete List; } }
void __fastcall TMainForm::N2Click(TObject *Sender) { TStringList *savetable = new TStringList; if (Save->Execute()) { for (int i = 0; i < Grid1->RowCount; i++) { savetable->Add(Grid1->Rows[i]->DelimitedText); } savetable->SaveToFile(Save->FileName + ".tx1"); Console->Lines->Add("Сохранен файл " + Save->FileName); delete savetable; } }
void __fastcall TForm1::FileSaveAs1Accept(TObject *Sender) { String a = FileSaveAs1->Dialog->FileName; if (a!=""){ // Speichern if (ExtractFileExt(a).UpperCase()!=".AD")a=a.SubString(1,a.Length()-ExtractFileExt(a).Length())+".ad"; TStringList *List = new TStringList(); List->Add(IntToStr(Max)); List->Add(Edit1->Text); for (int i=0;i<Max;i++){ List->Add(ListBox1->Items->Strings[i]); for (int b=0;b<66;b++){ List->Add(IntToStr(Data[i][b])); } } List->SaveToFile(a); } }
Debug::~Debug() { if(ntimes==0) return; if(!debug_on_exit) return; TStringList *L = new TStringList; double elapsed = 1000.0*((double)accumulated_counter.LowPart)/((double)FrequencyCounter.LowPart); double average_elapsed = elapsed / (double) ntimes; L->Add("Number of times called:"+AnsiString(ntimes)); L->Add("Elapsed time msec:"+AnsiString(elapsed)); L->Add("Average elapsed time msec:"+AnsiString(average_elapsed)); L->SaveToFile("c:\\debug.txt"); delete L; }
/*============================================================================= *NAME :TYSIniFile::Write : *MODULE :YSIniFiles.cpp : *FUNCTION :書き込み処理関数です : *PROCESS :・Iniファイル書き込み処理です。 : *RETURN : true = 正常終了 :false = エラー終了 : *PROGRAMMED :Y.Sasai *HISTORY : *ID -- DATE ------- NOTE ------------------------------------------------------ *00 03.02.10 Y.Sasai Ver.0.90 初期作成 */ bool TYSIniFile::Write( void ) { TStringList slist; // 2003.02.10 Y.Sasai Ver.0.90 文字列リストクラス int tempi; // 2003.02.10 Y.Sasai Ver.0.90 作業用変数 if ( FileName == "" ) { // 2003.02.10 Y.Sasai Ver.0.90 ファイル名未設定なら… return ( false ); // 2003.02.10 Y.Sasai Ver.0.90 おわりだ } for ( tempi = 0; tempi < Count; tempi++ ) { WriteSub( &slist, Items[tempi] ); // 2003.02.10 Y.Sasai Ver.0.90 書き込み処理だ if ( tempi < ( Count - 1 ) ) { // 2003.02.10 Y.Sasai Ver.0.90 最後でないなら… slist.Add( "" ); // 2003.02.10 Y.Sasai Ver.0.90 空行追加だ } } slist.SaveToFile( FileName ); // 2003.02.10 Y.Sasai Ver.0.90 ファイルに書き込み return ( true ); }
//--------------------------------------------------------------------------- bool TCalendarForm::downloadCalendar(String calendarURL, String dest) { try { String cal = IdHTTP1->Get( calendarURL ); // and write it out TStringList *sl = new TStringList(); sl->Text = cal; sl->SaveToFile( dest ); delete sl; return true; } catch ( Exception & e ) { ShowMessage( "HTPP Get of " + calendarURL + " failed: " + e.Message ); } return false; }
//--------------------------------------------------------------------------- void __fastcall TFormGrepStringsDialog::SaveAllToFile1Click( TObject *Sender) { // Salvar los Todos los renglones a un archivo. TStringList *List = new TStringList(); AnsiString Str; int i; if (List) { for (i=1; i<StringGrid->RowCount; i++) { Str=StringGrid->Cells[1][i]+":"+StringGrid->Cells[2][i]; List->Add(Str); } if (SaveDialog->Execute()) List->SaveToFile(SaveDialog->FileName); delete List; } }
//--------------------------------------------------------------------------- void TfrmMainFormServer::SaveModuleValues(){ if(lstModules->ItemIndex < 1){ return; } AnsiString selectedModule = lstModules->Items->Strings[lstModules->ItemIndex]; adapter.SetParamValue(selectedModule, "path", GenericUtils::ConvertPathWindowsToCygwin(txtPath->Text)); adapter.SetParamValue(selectedModule, "comment", txtComment->Text); adapter.SetParamValue(selectedModule, "read only", chkReadonly->Checked ? "true" : "false"); if(txtUID->Text.Trim().Length() > 0 && txtPWD->Text.Trim().Length() > 0 && chkUseAuth->Checked){ adapter.SetParamValue(selectedModule, "auth users", txtUID->Text.Trim()); //Now save the secret file AnsiString absoluteSecret = ExtractFilePath(Application->ExeName) + SECRET_DIR; if(!DirectoryExists(absoluteSecret)){ ForceDirectories(absoluteSecret); } AnsiString secretFileName = absoluteSecret + selectedModule + ".secret"; TStringList* sList = new TStringList(); sList->Add(txtUID->Text.Trim() + ":" + txtPWD->Text.Trim()); sList->SaveToFile(secretFileName); delete sList; adapter.SetParamValue(selectedModule, "secrets file", GenericUtils::ConvertPathWindowsToCygwin(secretFileName)); }else{ adapter.SetParamValue(selectedModule, "auth users", ""); adapter.SetParamValue(selectedModule, "secrets file", ""); } adapter.SaveConfig(); txtComment->Modified = false; txtUID->Modified = false; txtPWD->Modified = false; }
//--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); //除錯用的LOG TStringList *TempList = new TStringList; TempList->SaveToFile("runfunction.log"); delete TempList; //動態產生 Logo Form Form_Logo = new TForm_Logo(Application); // Form_Logo->Show(); Application->Title = "FMS Real-Time Monitor"; Application->ProcessMessages(); Application->CreateForm(__classid(TDataModule1), &DataModule1); Application->CreateForm(__classid(TCallCenter_Main_Form), &CallCenter_Main_Form); Application->CreateForm(__classid(TCHisTracer), &CHisTracer); Application->CreateForm(__classid(TForm_Setting), &Form_Setting); Application->CreateForm(__classid(TForm_Establish_Connect), &Form_Establish_Connect); Application->CreateForm(__classid(TForm_FreeAll), &Form_FreeAll); Application->CreateForm(__classid(TForm_ChooseCar), &Form_ChooseCar); Application->CreateForm(__classid(TForm_CustRoute), &Form_CustRoute); Application->CreateForm(__classid(TForm_Login), &Form_Login); Application->CreateForm(__classid(TForm_EditPassword), &Form_EditPassword); Application->CreateForm(__classid(TForm_ManageState), &Form_ManageState); Application->ProcessMessages(); Form_Logo->Visible = false; Form_Logo->Repaint(); Form_Logo->InitApp(); Form_Logo->Hide(); Form_Logo->Close(); //Free Memory in OnClose() Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; }
void __fastcall TForm1::Button3Click(TObject *Sender) { TStringList *List = new TStringList(); List->Add(Edit1->Text+"_Anz: .db "+IntToStr(Max)+",0"); List->Add(Edit1->Text+":"); for (int i=0;i<Max;i++){ String a = ".db "; for (int b=0;b<64;b++){ if (b%8==0){ a=a+"0b"; } a=a+IntToStr(Data[i][-1+(((int) b/8)+1)*8-b%8]); if (b%8==7){ a=a+","; } } a = a+IntToStr(Data[i][64])+","+IntToStr(Data[i][65]); List->Add(a); } List->SaveToFile(ExtractFilePath(Application->ExeName)+Edit1->Text+".asm"); }
//=========================================================================== //スレッド実行 //=========================================================================== void __fastcall TAttacheCaseFileDecrypt2::Execute() { int i, c, len; float ProgressPercentNumF; //進捗パーセンテージ(浮動小数点) // バッファ char source_buffer[BUF_SIZE]; char temp_buffer[BUF_SIZE]; char chain_buffer[BUF_SIZE]; char output_buffer[LARGE_BUF_SIZE]; char *headerbuffer; //パスワード bool fPasswordOk; //const int KeyArrayNum = sizeof(key)/sizeof(key[0]); String FilePath, FileName; // ファイルストリーム TFileStream *fsIn; TFileStream *fsOut; bool fInputFileOpen = false; bool fOutputFileOpen = false; float free_space_required; __int64 CurrentPos, TotalSize; __int64 CurrentDriveFreeSpaceSize; //処理する合計サイズ AllTotalSize = 0; int ret; //バッファ出力の返値 int FileIndex = 0; char token[17] = {0, }; const char charTokenString[17] = "_AttacheCaseData"; //復号の正否に使う const char charBrokenToken[17] = "_Atc_Broken_Data"; //ファイルが破壊されていることを示すトークン String AtcFileTokenString; //暗号化ファイルのトークン(文字列) String AtcFileCreateDateString; //暗号化ファイルの生成日時(文字列) //「復号したファイルを関連付けされたソフトで開く」一時的な設定 fTempOpenFile = fOpenFile; //フォルダーを一度開いたか(深いフォルダーすべてを開かないように) fOpenFolderOnce = false; // 出力するディレクトリ OutDirPath = IncludeTrailingPathDelimiter(OutDirPath); String TempRelativePath; // 平文ヘッダサイズ(データサブバージョン、破壊設定など) int PlainHeaderSize = 0; // 暗号化部分のヘッダサイズ int EncryptHeaderSize = 0; int DataVersion; // ver.2.00~は "5", ver.2.70~は "6" int AlgorismType; char reserved; // 0 //int TypeLimits; // ミスタイプ回数 0~10 (グローバル:public宣言とした) //bool fDestroy; // 破壊するか否か 0 or 1 (グローバル:public宣言とした) String PrefixString; //ファイルリストの接頭辞(Fn_*, U_*) int flush, status; // zlib z_stream z; // zlibライブラリとやりとりするための構造体 bool fInputEnd = false; // 入力ストリームの終了 //ヘッダデータから必要情報を取り出すための TMemoryStream *pms; // メモリストリーム int idx; TStringList *DataList; TStringList *tsv; TStringList *FileList = new TStringList(); // 0: ファイル名 __int64 *FileSizeList = 0; // 1: ファイルサイズ(フォルダは-1) int *FileAttrList = 0; // 2: 属性 int *FileDtChangeList = 0; // 3: 更新日 int *FileTmChangeList = 0; // 4: 更新時 int *FileDtCreateList = 0; // 5: 作成日 int *FileTmCreateList = 0; // 6: 作成時 int rest; int buf_size; //---------------------------------------------------------------------- // 平文のヘッダ内容チェック try { fsIn = new TFileStream(AtcFilePath, fmOpenRead | fmShareDenyNone); } catch(...) { //'復号するファイルを開けません。他のアプリケーションが使用中の可能性があります。' MsgText = LoadResourceString(&Msgdecrypt::_MSG_ERROR_FILE_OPEN); MsgType = mtError; MsgButtons = TMsgDlgButtons() << mbOK; MsgDefaultButton = mbOK; Synchronize(&PostConfirmMessageForm); goto LabelError; } fInputFileOpen = true; // 平文ヘッダサイズを取得 fsIn->Read(&PlainHeaderSize, sizeof(int)); // トークンを取得 fsIn->Read(token, 16); if (StrComp(token, charTokenString) != 0 ) { //-------------------------------------------------------- //実は自己実行形式ファイル?(拡張子偽装されている場合も) //-------------------------------------------------------- // サイズを再取得 fsIn->Seek(-(__int64)sizeof(__int64), TSeekOrigin::soEnd); fsIn->Read(&AllTotalSize, sizeof(__int64)); // 位置を戻す fsIn->Seek(-(AllTotalSize + sizeof(__int64)), TSeekOrigin::soEnd); // もう一度、平文ヘッダサイズを読み込む fsIn->Read(&PlainHeaderSize, sizeof(int)); // もう一度、トークンを取得 fsIn->Read(token, 16); // トークンを再チェック if (StrComp(token, charTokenString) != 0 ) { if ( StrComp(token, charBrokenToken) == 0 ) { //'復号するファイルを開けません。この暗号化ファイルは破壊されています。' MsgText = LoadResourceString(&Msgdecrypt::_MSG_ERROR_FILE_BROKEN); MsgType = mtError; MsgButtons = TMsgDlgButtons() << mbOK; MsgDefaultButton = mbOK; Synchronize(&PostConfirmMessageForm); } else { // '暗号化ファイルではありません。アタッシェケースによって暗号化されたファイルでないか、'+#13+ // 'ファイルが壊れている可能性があります。' MsgText = LoadResourceString(&Msgdecrypt::_MSG_ERROR_FILE_NOT_ATC); MsgType = mtError; MsgButtons = TMsgDlgButtons() << mbOK; MsgDefaultButton = mbOK; Synchronize(&PostConfirmMessageForm); } goto LabelError; } } //----------------------------------- // データバージョンチェック //----------------------------------- DataVersion = -1; fsIn->Read(&DataVersion, sizeof(int)); if (DataVersion > ATC_DATA_FILE_VERSION && DataVersion < 200) { //'データバージョンがちがいます。復号できません。'+#13+ //'ファイルは上位バージョンのアタッシェケースで暗号化されています。'+#13+ //'最新版を入手して復号を試みてください。'; MsgText = LoadResourceString(&Msgdecrypt::_MSG_ERROR_FILE_HIGHER_VERSION); MsgType = mtError; MsgButtons = TMsgDlgButtons() << mbOK; MsgDefaultButton = mbOK; Synchronize(&PostConfirmMessageForm); goto LabelError; } else if (DataVersion <= 103) { // Blowfishで暗号化されたファイル // 正式版では正常に復号されるが、ここではエラーとする //'データバージョンがちがいます。復号できません。'+#13+ //'ファイルはver.1のアタッシェケースで暗号化されています。'+#13+ //'古いバージョン(ver.2.75以前)か正式版を入手して復号を試みてください。'; MsgText = LoadResourceString(&Msgdecrypt::_MSG_ERROR_FILE_LOWER_VERSION); MsgType = mtError; MsgButtons = TMsgDlgButtons() << mbOK; MsgDefaultButton = mbOK; Synchronize(&PostConfirmMessageForm); goto LabelError; } else { // 104 ~ // Rijndaelで暗号化されている // アルゴリズムタイプ fsIn->Read(&AlgorismType, sizeof(int)); // ヘッダサイズを読み込む fsIn->Read(&EncryptHeaderSize, sizeof(int)); // int型からポインタキャストでchar配列を取り出す headerbuffer = (char*) & PlainHeaderSize; // データサブバージョンチェック(ver.2.70~) if (headerbuffer[0] >= 6) { TypeLimits = (int)headerbuffer[2]; fDestroy = (bool)headerbuffer[3]; // 有効範囲(1~10)かチェック if (TypeLimits < 1 || 10 < TypeLimits) { TypeLimits = 3; // デフォルト } } else { // headerbuffer[0] == 5 //旧バージョン TypeLimits = 3; fDestroy = false; } } //----------------------------------- // 復号の準備 //----------------------------------- // テーブル生成 gentables(); // パスワードのセット gkey(8, 8, key); //----------------------------------- // 暗号部ヘッダの復号 //----------------------------------- pms = new TMemoryStream; // IVの読み込み fsIn->Read(chain_buffer, BUF_SIZE); len = 0; while (len < EncryptHeaderSize) { // 読み出しバッファ for (c = 0; c < BUF_SIZE; c++) { source_buffer[c] = 0; } // 暗号化されたデータブロックの読み出し len += fsIn->Read(source_buffer, BUF_SIZE); for (c = 0; c < BUF_SIZE; c++) { // あとのxorのためによけておく temp_buffer[c] = source_buffer[c]; } // 復号処理 rijndael_decrypt(source_buffer); // xor for (c = 0; c < BUF_SIZE; c++) { source_buffer[c] ^= chain_buffer[c]; chain_buffer[c] = temp_buffer[c]; // CBC } pms->Write(source_buffer, BUF_SIZE); } pms->Seek((__int64)0, TSeekOrigin::soBeginning); //ポインタを先頭へ戻す DataList = new TStringList; DataList->LoadFromStream(pms, TEncoding::GetEncoding(932)); // shift-jis //----------------------------------- // 復号正否(復号できたか) //----------------------------------- //MsgText = DataList->Strings[0]; //MsgType = mtError; //MsgButtons = TMsgDlgButtons() << mbOK; //MsgDefaultButton = mbOK; //Synchronize(&PostConfirmMessageForm); if (DataList->Count == 0 || DataList->Strings[0].Pos("AttacheCase") == 0) { fPasswordOk = false; } else{ fPasswordOk = true; //パスワード合致 } if ( fPasswordOk == false ) { //'パスワードがちがいます。復号できません。'+#13+ //'場合によってはファイルが壊れている可能性もあります。'; MsgText = LoadResourceString(&Msgdecrypt::_MSG_ERROR_PASSWORD_WRONG); if ( fCompare == true ) { //メッセージに'コンペアに失敗しました。'を追加 MsgText += "\n" + LoadResourceString(&Msgdecrypt::_MSG_ERROR_COMPARE_FILE); } MsgType = mtError; MsgButtons = TMsgDlgButtons() << mbOK; MsgDefaultButton = mbOK; Synchronize(&PostConfirmMessageForm); delete DataList; goto LabelTypeMiss; } //----------------------------------- // 復号時のエンコーディング判定 //----------------------------------- pms->Position = 0; //DataList->LoadFromStream(pms, TEncoding::UTF8); DataList->LoadFromStream(pms, TEncoding::GetEncoding(65001)); PrefixString = "Fn_"; for (i = 0; i < DataList->Count; i++) { if ( DataList->Strings[i].Pos("U_0") == 1){ PrefixString = "U_"; //新バージョン(ver.2.8.0~)で暗号化されているようだ break; } } // Unicodeではないので従来のShift-JISで再度読み直し if (PrefixString == "Fn_") { pms->Position = 0; DataList->LoadFromStream(pms, TEncoding::GetEncoding(932)); } //=================================== // デバッグ //ShowMessage(DataList->Text); //=================================== #ifdef _DEBUG DataList->SaveToFile(OutDirPath + ExtractFileName(AtcFilePath) + ".txt"); #endif delete pms; //----------------------------------- // 暗号化ファイルの生成日時 //----------------------------------- //※特に今は使用していないが、将来的に // 期限付きでファイルを復号できなくなる // などの機能を追加しても良いかも。 //----------------------------------- AtcFileCreateDateString = DataList->Strings[1]; //----------------------------------- // ヘッダデータからファイルリストや // ファイル情報などを各変数を動的確保 //----------------------------------- FileSizeList = new __int64[DataList->Count]; // 1: ファイルサイズ(フォルダは-1) FileAttrList = new int[DataList->Count]; // 2: 属性 FileDtChangeList = new int[DataList->Count]; // 3: 更新日 FileTmChangeList = new int[DataList->Count]; // 4: 更新時 FileDtCreateList = new int[DataList->Count]; // 5: 作成日 FileTmCreateList = new int[DataList->Count]; // 6: 作成時 DataList->NameValueSeparator = ':'; tsv = new TStringList; tsv->Delimiter = '\t'; tsv->StrictDelimiter = true; char lpPath[MAX_PATH]; for (i = 0; i < DataList->Count; i++) { idx = DataList->IndexOfName(PrefixString+IntToStr(i)); if (idx > 0) { tsv->DelimitedText = DataList->ValueFromIndex[idx]; // ディレクトリ・トラバーサル対策(ver.2.8.5.0~) bool fDirectoryTraversal = false; AnsiString CanonicalizePath = AnsiString(OutDirPath + tsv->Strings[0]); if (CanonicalizePath.Length() < MAX_PATH) { // ファイルパスを正規化 if (PathCanonicalize(lpPath, CanonicalizePath.c_str()) == true) { // 正規化したパスが保存先と一致するか if (AnsiString(lpPath).Pos(OutDirPath) != 1 ){ fDirectoryTraversal = true; } } else{ fDirectoryTraversal = true; } } else{ fDirectoryTraversal = true; } if (fDirectoryTraversal == true) { //'不正なファイルパスが含まれています。復号できません。'; MsgText = LoadResourceString(&Msgdecrypt::_MSG_ERROR_INVALID_FILE_PATH) + "\n" + CanonicalizePath; MsgType = mtError; MsgButtons = TMsgDlgButtons() << mbOK; MsgDefaultButton = mbOK; Synchronize(&PostConfirmMessageForm); delete DataList; goto LabelTypeMiss; } FileList->Add(tsv->Strings[0]); // 0: ファイルパス FileSizeList[i] = StrToIntDef(tsv->Strings[1], -1); // 1: ファイルサイズ(フォルダは-1) FileAttrList[i] = StrToIntDef(tsv->Strings[2], -1); // 2: 属性 FileDtChangeList[i] = StrToIntDef(tsv->Strings[3], -1);// 3: 更新日 FileTmChangeList[i] = StrToIntDef(tsv->Strings[4], -1);// 4: 更新時 FileDtCreateList[i] = StrToIntDef(tsv->Strings[5], -1);// 5: 作成日 FileTmCreateList[i] = StrToIntDef(tsv->Strings[6], -1);// 6: 作成時 } } delete tsv; delete DataList; //----------------------------------- //ディスクの空き容量チェック //----------------------------------- CurrentDriveFreeSpaceSize = GetDiskFreeSpaceNum(OutDirPath); if (CurrentDriveFreeSpaceSize > -1 && fCompare == false) { if ( AllTotalSize > CurrentDriveFreeSpaceSize ) { //'復号する先のドライブの空き容量が足りません。'+#13+ //'復号するには、約%dMBの空き容量が必要です。復号処理を中止します。'; MsgText = LoadResourceString(&Msgdecrypt::_MSG_ERROR_DRIVE_NO_FREE_SPACE); free_space_required = (float)AllTotalSize/1024/1024; // MB MsgText = String().sprintf(MsgText.c_str(), free_space_required); MsgType = mtError; MsgButtons = TMsgDlgButtons() << mbOK; MsgDefaultButton = mbOK; Synchronize(&PostConfirmMessageForm); goto LabelError; } } else{ // OK! // } //----------------------------------- //複数フォルダ/ファイルを開こうとしているので確認 //----------------------------------- //復号したファイルを関連付けされたソフトで開くか if ( fTempOpenFile == true && FileList->Count > 4 && fCompare == false) { //'5つ以上のファイルを復号後に開こうとしていますが、処理を続けますか?'+#13+ //'「いいえ」を選択すると、開かず復号します。'; MsgText = LoadResourceString(&Msgdecrypt::_MSG_CONFIRM_OPEN_DECRYPTED_FILES); MsgType = mtConfirmation; MsgButtons = TMsgDlgButtons() << mbYes << mbNo << mbCancel; MsgDefaultButton = mbCancel; Synchronize(&PostConfirmMessageForm); if ( MsgReturnVal == mrCancel ) { goto LabelStop; } else if ( MsgReturnVal == mrNo ) { fTempOpenFile = true; } } //----------------------------------- // 復号開始 //----------------------------------- if (fCompare == false) { //'復号しています...' ProgressStatusText = LoadResourceString(&Msgdecrypt::_LABEL_STATUS_TITLE_DECRYPTING); ProgressMsgText = ExtractFileName(AtcFilePath); } else{ //'コンペアしています...' ProgressStatusText = LoadResourceString(&Msgdecrypt::_LABEL_STATUS_TITLE_COMPARING); ProgressMsgText = ExtractFileName(AtcFilePath); } // ファイル(データ本体)サイズを取得する AllTotalSize = fsIn->Size - fsIn->Position + 1; // 初期化ベクトルの読み出し TotalSize = fsIn->Read(chain_buffer, BUF_SIZE); // zlib 前準備 // 圧縮においてすべてのメモリ管理をライブラリに任せる z.zalloc = Z_NULL; z.zfree = Z_NULL; z.opaque = Z_NULL; if (inflateInit(&z) != Z_OK) { // エラー // zlibエラーは最後でまとめてメッセージ処理 goto LabelError; } // 通常は deflate() の第2引数は Z_NO_FLUSH にして呼び出す flush = Z_NO_FLUSH; // 入出力バッファ for (i = 0; i < LARGE_BUF_SIZE; i++) { output_buffer[i] = 0; } z.avail_in = 0; // 入力バッファ中のデータのバイト数 z.next_in = Z_NULL; // 入力バッファ中のデータのバイト数 z.next_out = output_buffer; // 出力バッファ残量 z.avail_out = LARGE_BUF_SIZE; // 出力ポインタ(展開するので大きめに) status = Z_OK; while (Terminated == false) { //----------------------------------- // 入力 //----------------------------------- if (z.avail_in == 0) { TotalSize = InputBuffer(len, source_buffer, chain_buffer, fsIn, fInputFileOpen, TotalSize); z.avail_in = len; z.next_in = source_buffer; if ( len == 0 ) { //入力ストリーム終了 fInputEnd = true; } } //----------------------------------- // 展開 //----------------------------------- status = inflate(&z, flush); //----------------------------------- // 処理ステータス //----------------------------------- if ( status == Z_OK ){ if ( z.avail_out == 0 ) { ret = OutputBuffer(output_buffer, LARGE_BUF_SIZE, fsOut, fOutputFileOpen, FileList, FileIndex, FileSizeList, FileAttrList, FileDtChangeList, FileTmChangeList, FileDtCreateList, FileTmCreateList); if ( ret == 0) { z.next_out = output_buffer; z.avail_out = LARGE_BUF_SIZE; } else if (ret == -1) { goto LabelError; } else{ goto LabelStop; } }//end if (z.avail_out == 0); } //----------------------------------- // バッファエラー //----------------------------------- else if ( status == Z_BUF_ERROR ) { //出力バッファがいっぱいの可能性 //出力バッファをクリアにして継続させる len = LARGE_BUF_SIZE - z.avail_out; ret = OutputBuffer(output_buffer, len, fsOut, fOutputFileOpen, FileList, FileIndex, FileSizeList, FileAttrList, FileDtChangeList, FileTmChangeList, FileDtCreateList, FileTmCreateList); if (ret == 0) { z.next_out = output_buffer; z.avail_out = LARGE_BUF_SIZE; } else if ( ret == -1) { goto LabelError; } else{ goto LabelStop; } } //----------------------------------- // 終了 //----------------------------------- else if (status == Z_STREAM_END) { break; } //----------------------------------- // エラー //----------------------------------- else{ // #define Z_OK 0 // #define Z_STREAM_END 1 // #define Z_NEED_DICT 2 // #define Z_ERRNO (-1) // #define Z_STREAM_ERROR (-2) // #define Z_DATA_ERROR (-3) // #define Z_MEM_ERROR (-4) // #define Z_BUF_ERROR (-5) // #define Z_VERSION_ERROR (-6) goto LabelError; } //----------------------------------- //進捗状況表示 ProgressPercentNumF = (float)TotalSize/AllTotalSize; ProgressPercentNum = (int)(ProgressPercentNumF*100); if (AllTotalSize < 104857600) { // 100MB未満 ProgressPercentNumText = IntToStr(ProgressPercentNum)+"%"; } else{ ProgressPercentNumText = FloatToStrF(ProgressPercentNumF*100, ffNumber, 4, 1)+"%"; } if ( fInputEnd == true) { break; } }//while (!Terminated); if (Terminated == true) { //ユーザーキャンセルで抜けてきた goto LabelStop; } //---------------------------------------------------------------------- // 万が一、出力バッファに余りがある場合 //---------------------------------------------------------------------- len = LARGE_BUF_SIZE - z.avail_out; ret = OutputBuffer(output_buffer, len, fsOut, fOutputFileOpen, FileList, FileIndex, FileSizeList, FileAttrList, FileDtChangeList, FileTmChangeList, FileDtCreateList, FileTmCreateList); if ( ret == 0 ) { } else if ( ret == -1 ){ goto LabelError; } else{ goto LabelStop; } if (inflateEnd(&z) != Z_OK) { goto LabelError; } ProgressPercentNum = 100; //'完了' ProgressStatusText = LoadResourceString(&Msgdecrypt::_LABEL_STATUS_TITLE_COMPLETE); ProgressMsgText = ExtractFileName(AtcFilePath); if ( fInputFileOpen == true ) { delete fsIn; fInputFileOpen = false; } if ( fOutputFileOpen == true ) { delete fsOut; fOutputFileOpen = false; } delete FileList; delete [] FileSizeList; // 1: ファイルサイズ(フォルダは-1) delete [] FileAttrList; // 2: 属性 delete [] FileDtChangeList; // 3: 更新日 delete [] FileTmChangeList; // 4: 更新時 delete [] FileDtCreateList; // 5: 作成日 delete [] FileTmCreateList; // 6: 作成時 //復号成功 StatusNum = 1; return; //----------------------------------- //パスワード入力ミスの後始末 //----------------------------------- LabelTypeMiss: ProgressPercentNum = 0; //'エラー' ProgressStatusText = LoadResourceString(&Msgdecrypt::_LABEL_STATUS_TITLE_ERROR); //'復号に失敗しました。' ProgressMsgText = LoadResourceString(&Msgdecrypt::_LABEL_STATUS_DETAIL_FAILED); if ( fInputFileOpen == true ) { delete fsIn; fInputFileOpen = false; } if ( fOutputFileOpen == true ) { delete fsOut; fOutputFileOpen = false; } delete FileList; delete [] FileSizeList; delete [] FileAttrList; delete [] FileDtChangeList; delete [] FileTmChangeList; delete [] FileDtCreateList; delete [] FileTmCreateList; StatusNum = -1; return; //----------------------------------- //エラーの後始末 //----------------------------------- LabelError: ProgressPercentNum = 0; if ( status < 0 ){ //'zlibライブラリからエラーを返されました。' //'エラー番号:' MsgText = LoadResourceString(&Msgdecrypt::_MSG_ERROR_ZLIB) + IntToStr(status) + "\n" + z.msg; if ( fCompare == true ) { //メッセージに'コンペアに失敗しました。'を追加 MsgText += "\n" + LoadResourceString(&Msgdecrypt::_MSG_ERROR_COMPARE_FILE); } MsgType = mtError; MsgButtons = TMsgDlgButtons() << mbOK; MsgDefaultButton = mbOK; Synchronize(&PostConfirmMessageForm); } //'エラー' ProgressStatusText = LoadResourceString(&Msgdecrypt::_LABEL_STATUS_TITLE_ERROR); if (fCompare == true) { //'コンペアで問題を見つけたようです。'; ProgressMsgText = LoadResourceString(&Msgdecrypt::_LABEL_STATUS_DETAIL_COMPARE_FAILED); } else{ //'復号に失敗しました。' ProgressMsgText = LoadResourceString(&Msgdecrypt::_LABEL_STATUS_DETAIL_FAILED); } if ( fInputFileOpen == true ) { delete fsIn; fInputFileOpen = false; } if ( fOutputFileOpen == true ) { delete fsOut; fOutputFileOpen = false; } delete FileList; delete [] FileSizeList; delete [] FileAttrList; delete [] FileDtChangeList; delete [] FileTmChangeList; delete [] FileDtCreateList; delete [] FileTmCreateList; StatusNum = -2; return; //----------------------------------- //ユーザーキャンセルの後始末 //----------------------------------- LabelStop: ProgressPercentNum = 0; //'キャンセル' ProgressStatusText = LoadResourceString(&Msgdecrypt::_LABEL_STATUS_TITLE_USER_CANCEL); //'復号が中止されました。' ProgressMsgText = LoadResourceString(&Msgdecrypt::_LABEL_STATUS_DETAIL_STOPPED); if ( fInputFileOpen == true ) { delete fsIn; fInputFileOpen = false; } if ( fOutputFileOpen == true ) { delete fsOut; fOutputFileOpen = false; } delete FileList; delete [] FileSizeList; delete [] FileAttrList; delete [] FileDtChangeList; delete [] FileTmChangeList; delete [] FileDtCreateList; delete [] FileTmCreateList; StatusNum = 0; return; }
/** * CSV出力処理 * @param * @return void */ void __fastcall TForm1::CsvOutput() { // メソッド内変数宣言 TStringList *output = new TStringList; try { //************************************************** //【CSV出力データ生成】 //************************************************** for (int i = 0; i < this->grd_Address->RowCount; i++) { //================================================== //【出力データ抽出】 //================================================== AnsiString id = this->grd_Address->Cells[0][i]; AnsiString name = this->grd_Address->Cells[1][i]; AnsiString address = this->grd_Address->Cells[2][i]; AnsiString memo = this->grd_Address->Cells[3][i]; AnsiString valid = this->grd_Address->Cells[4][i]; //================================================== //【チェック】 //================================================== if (i != 0 && valid != L"○") { continue; } //================================================== //【出力レコード生成】 //================================================== TStringList *record = new TStringList; record->Add(id); record->Add(name); record->Add(address); record->Add(memo); //================================================== //【出力データ設定】 //================================================== output->Add(record->CommaText); } //************************************************** //【CSV出力】 //************************************************** // ダイアログ設定 dlg_CsvOutput->DefaultExt = L".csv"; dlg_CsvOutput->Filter = L"CSVファイル (*.csv)|*.csv"; dlg_CsvOutput->Title = L"出力先を指定してください。"; dlg_CsvOutput->Options << ofOverwritePrompt << ofCreatePrompt; // ダイアログ表示 if (dlg_CsvOutput->Execute()) { // 出力 output->SaveToFile(dlg_CsvOutput->FileName); } } catch (int e) { throw e; } }