// удаляет ненужные файлы из текущего каталога и его подкаталогов void __fastcall Clear(void) { TSearchRec SearchRec; // информация о файле или каталоге cDir = GetCurrentDir()+"\\"; if ( FindFirst("*.*", faArchive,SearchRec) == 0) do { // проверим расширение файла int p = SearchRec.Name.Pos("."); FileExt = SearchRec.Name.SubString(p+1,MAX_PATH); if ( ( FileExt[1] == '~') || ( FileExt == "obj" ) || ( FileExt == "tds" ) ) { Form1->Memo1->Lines->Add(cDir+SearchRec.Name); DeleteFile(SearchRec.Name); n++; } } while ( FindNext(SearchRec) == 0); // обработка подкаталогов текущего каталога if ( FindFirst("*", faDirectory, SearchRec) == 0) do if ((SearchRec.Attr & faDirectory) == SearchRec.Attr ) { // каталоги ".." и "." тоже каталоги, // но в них входить не надо !!! if (( SearchRec.Name != "." ) && (SearchRec.Name != "..")) { ChDir(SearchRec.Name); // войти в подкаталог Clear(); // очистить каталог ChDir(".."); // выйти из каталога }; } while ( FindNext(SearchRec) == 0 ); }
void ApiChDir(DWORD *argv) { const char *path; if ((argv[MSG_ATTR_ID] & MSG_MAP_MASK) != MSG_ATTR_ROMAP) return; path = (const char*)argv[MSG_ADDR_ID]; if (CheckPathSize(path, argv[MSG_SIZE_ID]) == NULL) argv[MSG_RES_ID] = FS_ERR_ARGS_TOOLONG; else argv[MSG_RES_ID] = ChDir(pret[((THREAD_ID*)&argv[PTID_ID])->ProcID], path); KUnmapProcAddr((void*)path, argv); }
// щелчок на кнопке Выполнить void __fastcall TForm1::Button2Click(TObject *Sender) { Memo1->Clear(); // очистить поле Memo1 Directory = Edit1->Text; // каталог, в котором находятся проекты C++Builder ChDir(Directory); // войти в каталог проектов C++Builder Clear(); // очистить текущий каталог и его подкаталоги Memo1->Lines->Add(""); if (n) Memo1->Lines->Add("Удалено файлов: " + IntToStr(n)); else Memo1->Lines->Add("В указанном каталоге нет файлов, которые надо удалить."); }
char *FileReq(char *dir, const char *ext, char *result) { static char *cwd = NULL; static s32 cursor_pos = 1; static s32 first_visible; static s32 num_items = 0; DIR *dirstream; struct dirent *direntry; static s32 row; char tmp_string[41]; u32 keys; if (dir) ChDir(dir); cwd = GetCwd(); for (;;) { keys = key_read(); video_clear(); if (keys & KEY_SELECT) { FREE_LIST(); key_reset(); return NULL; } if (num_items == 0) { dirstream = opendir(cwd); if (dirstream == NULL) { port_printf(0, 20, "error opening directory"); return NULL; } // read directory entries while ((direntry = readdir(dirstream))) { s32 type = get_entry_type(cwd, direntry->d_name); // this is a very ugly way of only accepting a certain extension if ((type == 0 && strcmp(direntry->d_name, ".")) || check_ext(direntry->d_name) || (ext && (strlen(direntry->d_name) > 4 &&0 == strncasecmp(direntry->d_name + (strlen(direntry->d_name) - strlen(ext)), ext, strlen(ext))))) { // Hide ".." if at Unix root dir. Don't display Unix hidden files (.file). if ((!strcmp(direntry->d_name, "..") && strcmp(cwd, "/")) || direntry->d_name[0] != '.') { filereq_dir_items[num_items].name = (char *)malloc(strlen(direntry->d_name) + 1); strcpy(filereq_dir_items[num_items].name, direntry->d_name); filereq_dir_items[num_items].type = type; num_items++; if (num_items > 1024) break; } } } closedir(dirstream); sort_dir(filereq_dir_items, num_items); cursor_pos = 0; first_visible = 0; } // display current directory int len = strlen(cwd); if (len > 40) { strcpy(tmp_string, ".."); strcat(tmp_string, cwd + len - 38); port_printf(0, MENU_Y, tmp_string); } else port_printf(0, MENU_Y, cwd); if (keys & KEY_DOWN) { //down if (++cursor_pos >= num_items) { cursor_pos = 0; first_visible = 0; } if ((cursor_pos - first_visible) >= MENU_HEIGHT) first_visible++; } else if (keys & KEY_UP) { // up if (--cursor_pos < 0) { cursor_pos = num_items - 1; first_visible = cursor_pos - MENU_HEIGHT + 1; if (first_visible < 0) first_visible = 0; } if (cursor_pos < first_visible) first_visible--; } else if (keys & KEY_LEFT) { //left if (cursor_pos >= 10) cursor_pos -= 10; else cursor_pos = 0; if (cursor_pos < first_visible) first_visible = cursor_pos; } else if (keys & KEY_RIGHT) { //right if (cursor_pos < (num_items - 11)) cursor_pos += 10; else cursor_pos = num_items - 1; if ((cursor_pos - first_visible) >= MENU_HEIGHT) first_visible = cursor_pos - (MENU_HEIGHT - 1); } else if (keys & KEY_A) { // button 1 // directory selected if (filereq_dir_items[cursor_pos].type == 0) { strcat(cwd, "/"); strcat(cwd, filereq_dir_items[cursor_pos].name); ChDir(cwd); cwd = GetCwd(); FREE_LIST(); key_reset(); } else { sprintf(result, "%s/%s", cwd, filereq_dir_items[cursor_pos].name); if (dir) strcpy(dir, cwd); video_clear(); port_printf(16 * 8, 120, "LOADING"); video_flip(); FREE_LIST(); key_reset(); return result; } } else if (keys & KEY_B) { cursor_pos = 0; first_visible = 0; key_reset(); } // display directory contents row = 0; while (row < num_items && row < MENU_HEIGHT) { if (row == (cursor_pos - first_visible)) { // draw cursor port_printf(MENU_X + 16, MENU_LS + (10 * row), "-->"); } if (filereq_dir_items[row + first_visible].type == 0) port_printf(MENU_X, MENU_LS + (10 * row), "DIR"); int len = strlen(filereq_dir_items[row + first_visible].name); if (len > 32) { snprintf(tmp_string, 16, "%s", filereq_dir_items[row + first_visible].name); strcat(tmp_string, ".."); strcat(tmp_string, &filereq_dir_items[row + first_visible].name[len - 15]); } else snprintf(tmp_string, 33, "%s", filereq_dir_items[row + first_visible].name); port_printf(MENU_X + (8 * 5), MENU_LS + (10 * row), tmp_string); row++; } while (row < MENU_HEIGHT) row++; video_flip(); timer_delay(75); if (keys & (KEY_A | KEY_B | KEY_X | KEY_Y | KEY_L | KEY_R | KEY_LEFT | KEY_RIGHT | KEY_UP | KEY_DOWN)) timer_delay(50); } return NULL; }
void init_args(int argc, char **argv) { /* =================================================== */ /* to add an option: * - include it in opts[] * - set a flag in valopts indicating no value (0), * value required (1), or value optional (-1), * - then tell us what to do in the switch statement * * 3/1/03 - cwb - Current options are * -d=chg to work dir <opt=dir_name> * -f=chg deflt first file <opt=file.in> * -q=quiet, don't print "Check logfile" * at end of program. */ char str[1024]; char const *opts[] = { "-d", "-f", "-e", "-q" }; /* valid options */ int valopts[] = { 1, 1, 0, 0 }; /* indicates options with values */ /* 0=none, 1=required, -1=optional */ int i, /* looper through all cmdline arguments */ a, /* current valid argument-value position */ op, /* position number of found option */ nopts = sizeof(opts) / sizeof(char *); /* Defaults */ strcpy(_firstfile, DFLT_FIRSTFILE); QuietMode = EchoInits = swFALSE; a = 1; for (i = 1; i <= nopts; i++) { if (a >= argc) break; /* figure out which option by its position 0-(nopts-1) */ for (op = 0; op < nopts; op++) { if (strncmp(opts[op], argv[a], 2) == 0) break; /* found it, move on */ } if (op == nopts) { usage(); sw_error(-1, "Invalid option %s\n", argv[a]); } *str = '\0'; /* extract value part of option-value pair */ if (valopts[op]) { if ('\0' != argv[a][2]) { /* no space betw opt-value */ strcpy(str, (argv[a] + 2)); } else if ('-' != *argv[a + 1]) { /* space betw opt-value */ strcpy(str, argv[++a]); } else if (0 < valopts[op]) { /* required opt-val not found */ usage(); sw_error(-1, "Incomplete option %s\n", opts[op]); } /* opt-val not required */ } /* tell us what to do here */ /* set indicators/variables based on results */ switch (op) { case 0: /* -d */ if (!ChDir(str)) { LogError(logfp, LOGFATAL, "Invalid project directory (%s)", str); } break; case 1: strcpy(_firstfile, str); break; /* -f */ case 2: EchoInits = swTRUE; break; /* -e */ case 3: QuietMode = swTRUE; break; /* -q */ default: LogError(logfp, LOGFATAL, "Programmer: bad option in main:init_args:switch"); } a++; /* move to next valid arg-value position */ } /* end for(i) */ }
//--------------------------------------------------------------------------- void __fastcall TfrmSignsReports::btnMakeClick(TObject *Sender) { __int32 MinL = txtStartPosition->Text.ToInt(); __int32 MaxL = txtEndPosition->Text.ToInt(); //*** создадм объекты и подключимся к DBF-ным файлкам TADOConnection *DbfConnection; TADOCommand *DbfCommand; AnsiString DBFFolderPath = ExtractFilePath(Application->ExeName) + "DBFFiles"; ChDir(DBFFolderPath); try { DbfConnection = new TADOConnection(NULL); DbfCommand = new TADOCommand(NULL); DbfConnection->ConnectionString = "Driver={Microsoft Visual FoxPro Driver};UID=;SourceDB=" + DBFFolderPath + ";SourceType=DBF;Exclusive=No;Collate=MACHINE;OLE DB Services = 0"; DbfConnection->LoginPrompt = false; DbfConnection->Connected = true; DbfCommand->Connection = DbfConnection; } catch(EOleException &OleError) { ShowMessage("Возникла ошибка при открытии DBF файлов. Код ошибки: " + AnsiString(OleError.ErrorCode) + ". Сообщение: " + OleError.Message + "."); return; } DeleteTempDBFFiles(DbfCommand, DBFFolderPath); String TemplateFile; String ReportFile; String OutFile; FDesignSource=NULL; if (DesignSourceList->ItemIndex>=0) FDesignSource=dynamic_cast<TDtaSource*>(DesignSourceList->Items->Objects[DesignSourceList->ItemIndex]); FExistSource=NULL; if (ExistSourceList->ItemIndex>=0) FExistSource=dynamic_cast<TDtaSource*>(ExistSourceList->Items->Objects[ExistSourceList->ItemIndex]); MakeHeaderFile(DbfCommand,MinL*100,MaxL*100); try { String DllName; String RepExt; if (groupFormat->ItemIndex==0) { DllName="GenRep.dll"; RepExt=".rtf"; } else { DllName="HTMLGenRep.dll"; RepExt=".htm"; } AnsiString DllPath = ExtractFilePath(Application->ExeName) + DllName; HINSTANCE RepDll=LoadLibrary(DllPath.c_str()); if (RepDll) { ReportFunction GenRep=(ReportFunction)GetProcAddress(RepDll,"GenRep"); for (int i=0;i<ReportsList->Items->Count;i++) if (ReportsList->Checked[i]) { switch (i) { case 0: MakeRoadSignRegister(DbfCommand,MinL,MaxL);break; case 1: MakeNewRoadSignRegister(DbfCommand, MinL, MaxL);break; case 2: MakeRoadSignSpecification(DbfCommand, MinL, MaxL);break; case 3: MakeRoadSignPlacement(DbfCommand, MinL, MaxL);break; case 4: MakeRoadMarkRegister(DbfCommand,MinL,MaxL);break; } TemplateFile="\\ReportTemplate"+String(i+1)+RepExt; ReportFile="\\Report"+String(i+1)+".dbf"; OutFile=txtFileName->Text; int pos=OutFile.Pos("."); if (pos) OutFile.Delete(pos,1000); OutFile+=String(i+1)+RepExt; if (DeleteFileDialog(txtFilePath->Text,OutFile)) { try { String WorkPath=ExtractFilePath(Application->ExeName) + "DBFFiles"; DbfConnection->Connected = false; GenRep(String(WorkPath+TemplateFile).c_str(), WorkPath.c_str(), String(txtFilePath->Text+OutFile).c_str(), true , 1); DbfConnection->Connected = true; } catch (...) { ShowMessage("Во время формирования произошла ошибка. Обратитесь к разработчикам."); } } DeleteFile(DBFFolderPath + ReportFile); } for (int i=0;i<TitulList->Items->Count;i++) { if (TitulList->Checked[i]) { TemplateFile="\\TitulTemplate"+String(i+1)+RepExt; OutFile=txtFileName->Text; int pos=OutFile.Pos("."); if (pos) OutFile.Delete(pos,1000); OutFile+=String(i+1)+"_t"+RepExt; try { String WorkPath=ExtractFilePath(Application->ExeName) + "DBFFiles"; DbfConnection->Connected = false; GenRep(String(WorkPath+TemplateFile).c_str(), WorkPath.c_str(), String(txtFilePath->Text+OutFile).c_str(), true , 1); DbfConnection->Connected = true; } catch (...) { ShowMessage("Во время формирования произошла ошибка. Обратитесь к разработчикам."); } } } FreeLibrary(RepDll); } else ShowMessage("Не найдена библиотека"+DllName); } catch(...) { ShowMessage("Ошибка при формировании отчета"); } DbfConnection->Connected = false; delete DbfCommand; delete DbfConnection; }