Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка имени файла 
:(
    Опции темы
Kinch
Дата 7.4.2009, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 13.1.2009

Репутация: -1
Всего: -1



у меня вопрос как можно сделать проверку-является ли файл текстовым, и если нет то нужно чтобы выдавалась ошибка.


так я задаю массив в 20 символов, куда нуна писать имя файла, например "file.txt"

Код

char s[20];
cin.getline(s,20);
    std::ifstream in(s);



и еще нужно сделать так чтобы вводилось только "file", те чтобы ".txt" добавлялось само. я знаю что нужно сделать проверку на наличие в массиве сивмолов ".txt"....только не магу сообразить как(( smile 
PM MAIL   Вверх
smoke_man
Дата 7.4.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: нет
Всего: 17



Можно так:
Код

#include <cstdlib>
#include <iostream>
#include <string.h>


int main(int argc, char *argv[])
{
    char *example = "file";
    char buff[30];
    strcpy(buff,example);
    if(strncmp(&example[strlen(example) - 4],".txt",4) != 0)
        strcat(buff,".txt");   
    std::cout<<buff;
    system("PAUSE");
    return EXIT_SUCCESS;
}



--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
Kinch
Дата 7.4.2009, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 13.1.2009

Репутация: -1
Всего: -1



не хочет работать(( окно консоли появляется, я набираю "file" дальше к нему прибавляется .txt, патом появляется строчка "для продолжения нажимите любую клавишу" и окно закрывается, а дальнейшая работа кода не происходит((

Добавлено через 1 минуту и 34 секунды
вот полный код программы, она считает пустые строки в текстовом файле


Код

#include <fstream>
#include <iostream>
#include <string>
#include <conio.h>
#include <cstdlib>
#include <string.h>
using namespace std;
int main()
{
char s[20];
cin.getline(s,20);
    std::ifstream in(s);

    {
    char *example = "file";
    char buff[30];
    strcpy(buff,example);
    if(strncmp(&example[strlen(example) - 4],".txt",4) != 0)
        strcat(buff,".txt");
    std::cout<<buff;
    //system("PAUSE");
    return EXIT_SUCCESS;
    }


    if (!in)
    {
        std::cerr << "Error. File wasn't open / exist" << std::endl;
        return -1;
    }
    std::string str;
    getline(in, str, '\032');
    std::string::size_type pos = 0, cnt = 0;
    while ((pos = str.find("\n\n", pos)) != std::string::npos)
    {
        ++pos;
        ++cnt;
    }
    if (str[0] == '\n')
        ++cnt;
    if (str[str.size() - 1] == '\n')
        ++cnt;

    std::cout << cnt << std::endl;
    getch();
    return 0;
}

PM MAIL   Вверх
Anikmar
Дата 7.4.2009, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(Kinch @  7.4.2009,  21:46 Найти цитируемый пост)
    return EXIT_SUCCESS;

Это что? Зачем?
PM MAIL ICQ   Вверх
Kinch
Дата 7.4.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 13.1.2009

Репутация: -1
Всего: -1



я хз если честно, я взял код который предложил  smoke_man
PM MAIL   Вверх
smoke_man
Дата 8.4.2009, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: нет
Всего: 17



Я предложил лишь рабочее приложение с примером того,  как можно реализовать проверку на наличие ".txt" в строке. В твоем случае нужно было сделать следующее:
Код

.....
char s[20];
char buff[25];                                            //вспомогательный буфер
cin.getline(s,20);
strcpy(buff,s);                                           //Копируем в вспомогательный буфер введеную строку
if(strncmp(&s[strlen(s) - 4],".txt",4) != 0) // проверяем последние 4 символа на наличие ".txt"
       strcat(buff,".txt");                              //если ".txt" не найден, то добавляем его к строке
std::ifstream in(buff);
if(!in)
 .....
 



Это сообщение отредактировал(а) smoke_man - 8.4.2009, 07:37


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
Anikmar
Дата 8.4.2009, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(Kinch @  7.4.2009,  23:07 Найти цитируемый пост)
я хз если честно, я взял код который предложил  smoke_man,  

Ну так немного вникните - вы же сами поставили команду закончить программу, а теперь удивляетесь почему она дальше не идет.
PM MAIL ICQ   Вверх
mrbrooks
Дата 8.4.2009, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Цитата(Kinch @  7.4.2009,  18:56 Найти цитируемый пост)
у меня вопрос как можно сделать проверку-является ли файл текстовым, и если нет то нужно чтобы выдавалась ошибка.

вопрос несколько неоднозначный. если очень захотеть, то можно любой файл открыть, как текстовый, и получить море полезной информации.


smoke_man, камрад - парсинг строки не самый лучший выход - ибо текстовый файл может быть с расширением *.dat, *.res, не говоря уж про *.fucktxt и т.п.
PM MAIL   Вверх
smoke_man
Дата 8.4.2009, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: нет
Всего: 17



mrbrooks, согласен, но , как я понял, задача была поставлена именно на файл с расширением txt или вообще без расширения.


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
Anikmar
Дата 8.4.2009, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



 smile 
Цитата(smoke_man @  8.4.2009,  08:03 Найти цитируемый пост)
mrbrooks, согласен, но , как я понял, задача была поставлена именно на файл с расширением txt или вообще без расширения. 

Я иногда медлено обалдеваю от "полезности" таких задач. И много знаний она прибавляет?
PM MAIL ICQ   Вверх
mrbrooks
Дата 8.4.2009, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



smoke_man, это да. 
я к тому, что вопрос несколько неоднозначный сам по себе и таит в себе кучу встречных вопросов  smile

Добавлено через 1 минуту и 32 секунды
Цитата(Anikmar @  8.4.2009,  08:05 Найти цитируемый пост)
Я иногда медлено обалдеваю от "полезности" таких задач. И много знаний она прибавляет? 

Я то же не догоняю. 
PM MAIL   Вверх
Kinch
Дата 8.4.2009, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 13.1.2009

Репутация: -1
Всего: -1



всем спс)) все работает))
PM MAIL   Вверх
xvr
Дата 8.4.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(smoke_man @ 7.4.2009,  20:45)
Можно так:
Код

#include <cstdlib>
#include <iostream>
#include <string.h>


int main(int argc, char *argv[])
{
    char *example = "file";
    char buff[30];
    strcpy(buff,example);
    if(strncmp(&example[strlen(example) - 4],".txt",4) != 0)
        strcat(buff,".txt");   
    std::cout<<buff;
    system("PAUSE");
    return EXIT_SUCCESS;
}

Если длинна имени файла (вместе с расширением) будет меньше 4х, то работать не будет - конструкция &example[strlen(example) - 4] выйдет за начало строки example

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1031 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.