Вы находитесь на странице: 1из 7

Объектно-ориентированное программирование на С++

Лапшун Татьяна Степановна


Lapshun_t@itstep.academy

Функция system
int system(const char *str)
Прототип: 
stdlib.h
Описание: 
Функция system() передает командному процессору операционной
системы команду в строке, на которую указывает параметр str, и возвращает
статус выхода команды. Для выполнения команды должен иметься
командный процессор.
Пример: 
Следующая программа выводит содержимое текущего рабочего
каталога:
#include <stdlib.h>

int main()
{
system("dir");
return 0;
}

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Следующая программа выводит содержимое заданного каталога:

#include <stdlib.h>
#include<windows.h>

int main()
{
system("dir c:\\");
return 0;
}

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Следующая программа позволяет зайти в родительский каталог:

#include <stdlib.h>
#include <direct.h>
#include<windows.h>

int main()
{
_chdir("..\\");
system("dir");
return 0;
}

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Следующая программа выводит содержимое текущего рабочего


каталога в файл:

#include <stdlib.h>
#include<windows.h>
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("dir >> sys.txt");
return 0;
}

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Следующая программа запускает программу по заданному пути:


#include <stdlib.h>
#include<windows.h>

int main()
{
system("start C:\\Users\\Tatiana\\Desktop\\Lapshun\\
ConsoleApplication2\\ConsoleApplication2\\sys.txt");
system("dir");
return 0;
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Поиск файлов

Для групповых операций с файлами используются маски имён файлов.


Маска представляет собой последовательность букв, цифр и прочих
допустимых в именах файлов символов, в которой также могут встречаться
следующие символы.
Символ «?» (вопросительный знак) означает ровно один произвольный
символ.
Символ «*» (звёздочка) означает любую последовательность символов
произвольной длины, в том числе «*» может задавать и пустую
последовательность.

Настройка. Символ строки может быть представлен в виде 1-го


байта и 2-х байтов. Компилятор Visual C++ поддерживает char и wchar_t
как встроенные типы данных для кодировок ANSI и UNICODE.Хотя есть
более конкретное определение Юникода, но для понимания, ОС Windows
использует именно 2-х байтовую кодировку для много языковой поддержки
приложений. В настройках проекта на вкладке GENERAL есть параметр
CHARACTER SET который указывает в какой кодировке будет
компилироваться программа:

Project -> Properties (Alt+F7)


#include<windows.h>
#include<string.h>
#include<iostream>
using namespace std;
int main(){
WIN32_FIND_DATA FindFileData;
//полный путь
//HANDLE hf = FindFirstFile("C:\*", &FindFileData);
//родительская директория
//HANDLE hf = FindFirstFile("..\\*", &FindFileData);
//текущая директория
HANDLE hf = FindFirstFile("\*.cpp", &FindFileData);
CHAR fileNames[200][MAX_PATH];
INT i = 0;
if (hf == INVALID_HANDLE_VALUE){ puts("Path not found");
return 1; }
do{
strcpy(fileNames[i], FindFileData.cFileName);
cout << "NAME: " << fileNames[i]
<< " SIZE: " << FindFileData.nFileSizeLow << " bytes"
<< " FILE_ATTRIBUTE: "<< FindFileData.dwFileAttributes
<< endl;
i++;
} while (FindNextFile(hf, &FindFileData));
FindClose(hf);
return 0;
}

FindFirstFile(("\*.cpp", &FindFileData);
В качестве аргументов принимает строку типа «C:\windows\*» и
указатель на структуру WIN32_FIND_DATA. В случае успеха процедура
возвращает хэндл, соответствующий поиску, а в FindFileData записывается
информация о первом найденном файле — его имя, размер, атрибуты, время
создания и так далее. В случае ошибки возвращается
INVALID_HANDLE_VALUE.
FindNextFile(hf, & FindFileData)
Принимает хэндл, полученный от FindFirstFile, и указатель на
WIN32_FIND_DATA. Если FindNextFile вернул TRUE, значит в FindFileData
записана информация о следующем файле. Если FALSE, значит все файлы,
соответствующие маске, были перечислены.
FindClose(hf);
Когда поиск завершен, FindClose закрывает хэндл, полученный от
FindFirstFile.

Поиск только папок

FindFileData - это структура


dwFileAttributes - это член структуры типа DWORD(32 битное число)
FILE_ATTRIBUTE_DIRECTORY - это маска, с ее помощью выделяется
нужный бит из dwFileAttributes в операции &.
В dwFileAttributes содержится информация о различных атрибутах (т.е.
установлены или сняты различные биты). FILE_ATTRIBUTE_DIRECTORY
как раз предназначена для определения, установлен или снят бит,
отвечающий за то, файл ли это или папка.

#include<windows.h>
#include<iostream>
using namespace std;

int main(){
WIN32_FIND_DATA FindFileData;
//текущая директория
HANDLE hf = FindFirstFile("*", &FindFileData);

INT i = 0;
if (hf == INVALID_HANDLE_VALUE){
puts("Path not found");
return 1;
}
do{
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY
//если директория
&& !(strcmp(FindFileData.cFileName, ".") == 0)
&& !(strcmp(FindFileData.cFileName, "..") == 0))
cout << "NAME: " << FindFileData.cFileName
<< " ATTRIBUTE_DIRECTORY: "
<< FindFileData.dwFileAttributes << endl;

} while (FindNextFile(hf, &FindFileData));


FindClose(hf);
return 0;
}

Вам также может понравиться