Форум программистов, компьютерный форум CyberForum.ru

Действие с файлом в зависимости от его типа - C++

Восстановить пароль Регистрация
 
fireLORD
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 21
08.06.2013, 22:05     Действие с файлом в зависимости от его типа #1
В общем препод сказал написать программу к понедельнику, мол напишешь - поставлю зачет
Суть программы с его слов:
"Я задаю любой путь к файлу, если этот .txt файл, на экране должно появиться сообщение "Это текстовый файл, открывается с помощью Блокнота", если это .jpeg файл, на экране должно появиться сообщение "Это графический файл, открывается с помощью Photoshop'a", если это .mp3 файл, на экране должно появиться сообщение "Это музыкальный файл, открывается с помощью Winamp'a"
Помогите пожалуйста, как сделать, чтоб он вбивал путь к файлу, а прога распознавала расширение, и в зависимости от этого выводило нужное сообщение на экран.
Заранее благодарю посетителей форума.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2013, 22:05     Действие с файлом в зависимости от его типа
Посмотрите здесь:

С++. Действие с числом и составляющими его цифрами. C++
C++ Перегрузка оператора шаблонного класса в зависимости от типа
Работа с файлом типа fstream C++
C++ На вход подается число (int или float) в зависимости от его типа провернуть над ним разные операции
Возвращаемая информация в зависимости от типа принимающей переменной C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 22:09     Действие с файлом в зависимости от его типа #2
Считывай путь, читай из него последние три символа и сравнивай их с расширениями.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
08.06.2013, 22:14     Действие с файлом в зависимости от его типа #3
Ну судя по названиям программ, целевая ОС - винда. Значит считывайте информацию о расширении из реестра и программу, которая ассоциируется с этим типом файла
MrCath
7 / 7 / 1
Регистрация: 08.11.2012
Сообщений: 68
08.06.2013, 22:15     Действие с файлом в зависимости от его типа #4
Очень легко. Если нужна оболочка, то используй WinAPI и приделывай кнопочки. Если консоль, то поставиль открытие каждого файла после нажатия на кнопку при помощи, например, system("pause").
После нажатия на кнопку или любой клавиши в консоли откроется окно выбора файла по проводнику. Код диалога такой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <Windows.h>
int main(){
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    OPENFILENAME ofn={0};
    char szDirect[260];
    char szFileName[260];
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = NULL;
    ofn.lpstrFile = szDirect;
    *(ofn.lpstrFile) = 0;
    ofn.nMaxFile =sizeof(szDirect);
    ofn.lpstrFilter = NULL;
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = szFileName;
    *(ofn.lpstrFileTitle) = 0;
    ofn.nMaxFileTitle = sizeof(szFileName);
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = OFN_EXPLORER;
    GetOpenFileName(&ofn);
    std::cout<<szDirect;
    std::cin.get();
    return 0;
}
Это возвратит тебе путь к файлу с его расширением.
Далее ты смотришь в самый конец строки и просто по условиям определяешь надпись, не обязательно посимвольно, например, послендие 4 буквы сравни с ".mp3", если не подошло, то последние 5 букв с ".jpeg" и так далее.
Когда условие верно, то ставь открытие на конкретную программу, а на форме или в консоли пиши фразу о типе файла. Открыть можно через
C++
1
ShellExecute(NULL, "open", /*путь к файлу строкой*/, NULL, NULL, SW_SHOWNORMAL);
это откроет программой по умолчанию...
Можно в цикл поместить, можно на одно открытие сделать, если это консоль. В оболочке можно вызывать на кнопку.
Если ничего не подошло, то вернуть надпись, типа "Не знаю такого расширения"...
Удачи, делов на 5 сек)
fireLORD
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 21
08.06.2013, 22:16  [ТС]     Действие с файлом в зависимости от его типа #5
Отлично, хорошая идея.
Тогда 2 вопроса навязывается..
Как будет выглядить строчка где он будет сам в консольном меню вводить путь к файлу
И как будет выглядить стрчока где прога считывает последние три символа из того, что ввел препод.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.06.2013, 22:18     Действие с файлом в зависимости от его типа #6
немного неоптимально, но поставленной задаче соответствует
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <sstream>
#include <string>
#include <locale>
#include <map>
 
int main()
{
    std::map<std::string, std::string> out;
    out["txt"] = "text file";
    out["jpeg"] = "image";
    out["mp3"] = "music file";
 
    std::ctype<char>::mask table[std::ctype<char>::table_size] = { std::ctype<char>::mask() };
    table[static_cast<std::size_t>(' ')] = std::ctype<char>::space;
    table[static_cast<std::size_t>('.')] = std::ctype<char>::space;
 
    std::string str;
    std::cout << "Enter a file name: ";
    std::getline(std::cin, str);
    std::istringstream stream(str);
    stream.imbue(std::locale(stream.getloc(), new std::ctype<char>(table)));
 
    while (stream >> str) {}
 
    std::cout << "this is a " << (out[str] != std::string() ? out[str] : "unknow file") << std::endl;
 
    return 0;
}
MrCath
7 / 7 / 1
Регистрация: 08.11.2012
Сообщений: 68
08.06.2013, 22:18     Действие с файлом в зависимости от его типа #7
Естественно директория и имя файла будут содержаться в переменных: szDirect и szFileName...
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.06.2013, 22:19     Действие с файлом в зависимости от его типа #8
Цитата Сообщение от Croessmah Посмотреть сообщение
Значит считывайте информацию о расширении из реестра и программу, которая ассоциируется с этим типом файла
Цитата Сообщение от MrCath Посмотреть сообщение
Когда условие верно, то ставь открытие на конкретную программу, а на форме или в консоли пиши фразу о типе файла. Открыть можно через
C++
1
ShellExecute(NULL, "open", /*путь к файлу строкой*/, NULL, NULL, SW_SHOWNORMAL);
это откроет программой по умолчанию...
задача ж заключается в том, чтобы получить расширение файла и вывести что это за файл. Или я что-то не так понял?
MrCath
7 / 7 / 1
Регистрация: 08.11.2012
Сообщений: 68
08.06.2013, 22:22     Действие с файлом в зависимости от его типа #9
Цитата Сообщение от fireLORD Посмотреть сообщение
Отлично, хорошая идея.
Тогда 2 вопроса навязывается..
Как будет выглядить строчка где он будет сам в консольном меню вводить путь к файлу
И как будет выглядить стрчока где прога считывает последние три символа из того, что ввел препод.
1. Диалог можно заменить на его ввод пути в массив символов. Это будет путем к файлу.
2. Сверять по условиям... что тут не понять?

Добавлено через 55 секунд
Kastaneda, ему нужно еще и открыть его прогой по умолчанию... ну или мне так показалось)
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.06.2013, 22:24     Действие с файлом в зависимости от его типа #10
Цитата Сообщение от MrCath Посмотреть сообщение
Kastaneda, ему нужно еще и открыть его прогой по умолчанию... ну или мне так показалось)
Цитата Сообщение от fireLORD Посмотреть сообщение
Я задаю любой путь к файлу, если этот .txt файл, на экране должно появиться сообщение "Это текстовый файл, открывается с помощью Блокнота", если это .jpeg файл, на экране должно появиться сообщение "Это графический файл, открывается с помощью Photoshop'a", если это .mp3 файл, на экране должно появиться сообщение "Это музыкальный файл, открывается с помощью Winamp'a"
мне по другому показалось)
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
08.06.2013, 22:25     Действие с файлом в зависимости от его типа #11
Kastaneda, Ну если ограничится тремя расширениями, то норм.
А если препод выберет фаил .bmp, то не прокатит
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.06.2013, 22:27     Действие с файлом в зависимости от его типа #12
Цитата Сообщение от Croessmah Посмотреть сообщение
А если препод выберет фаил .bmp, то не прокатит
Дык оно напишет "unknow file". На любую претензию препода можно/нужно ответить "Нужно ТЗ граммотно формулировать, а не .bmp вводить"

А так да, самый верный путь - читать реестр.
fireLORD
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 21
08.06.2013, 22:32  [ТС]     Действие с файлом в зависимости от его типа #13
Kastaneda, А разве в твой код на 1ой странице, нельзя вставить еще расширения?
Он сказал мол чем больше сделаешь расширений, тем лучше. Думаю если сделать 3 то сделать еще 5 нет ни чего сложного)
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.06.2013, 22:36     Действие с файлом в зависимости от его типа #14
Цитата Сообщение от fireLORD Посмотреть сообщение
Kastaneda, А разве в твой код на 1ой странице, нельзя вставить еще расширения?
Он сказал мол чем больше сделаешь расширений, тем лучше. Думаю если сделать 3 то сделать еще 5 нет ни чего сложного)
Можно, но это неправильный путь (так индусы пишут). Если подразумевается расширение программы, то лучше сделать как сказал Croessmah, т.е. читать реестр.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 22:38     Действие с файлом в зависимости от его типа #15
Цитата Сообщение от Kastaneda Посмотреть сообщение
то лучше сделать как сказал Croessmah, т.е. читать реестр.
fireLORD, тебе случайно не в Borland C++ 3.1 это надо сделать? Каким компилятором вы пользуетесь?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2013, 11:29     Действие с файлом в зависимости от его типа
Еще ссылки по теме:

C++ Действовать в зависимости от типа переменной
C++ Выполнить действие в зависимости от значения переменной
Ветвление в зависимости от типа данных C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fireLORD
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 21
09.06.2013, 11:29  [ТС]     Действие с файлом в зависимости от его типа #16
Нет. VS 2012 пользуюсь ну

Добавлено через 12 часов 46 минут
Ребят так вопрос.
Я путь к файлу указываю через Char.
Как теперь мне проверить существует ли вообще файл, указанный в переменной типа Char?
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "stdafx.h"
#include <iostream>
using namespace std;
 
 
int _tmain()
{
 char Put[34];
 cout << "Укажите путь к файлу";
    cin >> Put ;
    cout << "Путь к файлу" << a;
    system("Pause");
Собственно после того как я указал путь, мне нужно проверить существование данного файла
Yandex
Объявления
09.06.2013, 11:29     Действие с файлом в зависимости от его типа
Ответ Создать тему
Опции темы

Текущее время: 14:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru