Проблема Напишите цикл

nikos

Green Team
25.12.2016
507
199
BIT
0
Есть задача. Написать цикл While который выполнялся только если в системе есть определенный файл. При этом программа в случае не выполнения цикла должна не просто зависать а завершаться с ошибкой в которой указывалось бы на отсутсвие конкретного файла. К сожалению с моими навыками програмирования у меня это вызывает затруднения. Может ли кто-то на форуме написать или хотя-бы показать пример?
 
Последнее редактирование:

nikos

Green Team
25.12.2016
507
199
BIT
0
Где есть? Рядом с программой, или вообще, где-то на диске?
Что должно быть в теле цикла?
Где-то на диске. Хз способов проверить наличие файла на диске в с++ вроде достаточно. Желательно не через Winapi.
 

nikos

Green Team
25.12.2016
507
199
BIT
0
Что должно быть в теле цикла?
Честно не совсем понимаю вопрос. В цикле должна происходить проверка наличие файла на диске как это будет релизовыватся другой вопрос. Если не сложно то 2 варианта без Winapi и с.
Просто хочется увидеть разные вариации.
 

morgot

Green Team
25.07.2018
74
35
BIT
2
Ну как где-то на диске? Если файл находится рядом со программой, его можно просто открыть. Не открывается (ошибка not_found), значит его нет. Это неправильный путь, правильней через апи , но допустим так. Если же файл где-то черт знает где, его надо искать. Делать перебор всех дисков в системе, рекурсию, по папкам .

Я использую винапи, всякую высокоуровневую ересь не признаю.
 

nikos

Green Team
25.12.2016
507
199
BIT
0
Ну как где-то на диске? Если файл находится рядом со программой, его можно просто открыть. Не открывается (ошибка not_found), значит его нет. Это неправильный путь, правильней через апи , но допустим так. Если же файл где-то черт знает где, его надо искать. Делать перебор всех дисков в системе, рекурсию, по папкам .

Я использую винапи, всякую высокоуровневую ересь не признаю.
Ладно давайте использовать апи. В любом случае любой код можно переделать.
 

morgot

Green Team
25.07.2018
74
35
BIT
2
Самое простое, всего лишь 1 вызов апи.

C:
#include <windows.h>

int main()
{
DWORD dRet = 0;

do
{
dRet = GetFileAttributesA("calc2.exe"); //тут имя файла, который проверяем
    if (dRet == INVALID_FILE_ATTRIBUTES ) //такого файла нет
    {
        MessageBoxW(0,L"File not found",L"Error",MB_ICONERROR);
        break; //ошибка и выход с цикла
    }
//тут что-то делаем , если файл нашелся.
    
}while(1); //бесконечный цикл


return 0;
}
 
  • Нравится
Реакции: nikos

nikos

Green Team
25.12.2016
507
199
BIT
0
Самое простое, всего лишь 1 вызов апи.

C:
#include <windows.h>

int main()
{
DWORD dRet = 0;

do
{
dRet = GetFileAttributesA("calc2.exe"); //тут имя файла, который проверяем
    if (dRet == INVALID_FILE_ATTRIBUTES ) //такого файла нет
    {
        MessageBoxW(0,L"File not found",L"Error",MB_ICONERROR);
        break; //ошибка и выход с цикла
    }
//тут что-то делаем , если файл нашелся.
  
}while(1); //бесконечный цикл


return 0;
}
Прошу прощения не врубаюсь зачем бесконечный цикл? Если файл нашелся то спокойной код можно выполнять дальше.
 

morgot

Green Team
25.07.2018
74
35
BIT
2
Зачем тогда вообще цикл? И какое условие в нем должно быть?
В плане, цикл нужен для повторяющихся действий. Если файл НЕ нашелся - по условиям задачи (ваши посты), прога дает ошибку и прерывается. Если нашелся - тоже прервать? Тогда зачем он нужен, можно просто проверить наличие файла да и все.
 

nikos

Green Team
25.12.2016
507
199
BIT
0
Зачем тогда вообще цикл? И какое условие в нем должно быть?
В плане, цикл нужен для повторяющихся действий. Если файл НЕ нашелся - по условиям задачи (ваши посты), прога дает ошибку и прерывается. Если нашелся - тоже прервать? Тогда зачем он нужен, можно просто проверить наличие файла да и все.
Я знаю для чего нужен цикл. Тот пример который предложили вы не совсем подходит под мою ситуацию. Мне нужен цикл но чтобы вслучае успешного выполнения этого цикла выполнялся код не только в цикле но и в других функциях моей программы после цикла. Не сочтите за грубость но я так хочу)
 

morgot

Green Team
25.07.2018
74
35
BIT
2
Ну тогда идите в комерц. раздел или почитайте немного матчасть по циклам.
 

<Gh0St>

Green Team
23.10.2018
18
6
BIT
0
Действительно, странная постановка задачи.
Можно сделать так:
1) До цикла создаём флаг "был ли найден файл"
2) Запускаем цикл, в котором ищем файл (постоянный поиск/поиск с задержкой/как угодно). Задаём условия для прерывания цикла
3) Если нашли файл, взводим флаг и прерываем выполнение цикла
4) После цикла проверяем флаг "был ли найден файл". Если флаг взведён, выполняем свой код
Таким образом, если флаг "был ли найден файл" не взведён, не делаем ничего
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!