Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/117: Рейтинг темы: голосов - 117, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 30.06.2010
Сообщений: 19

Открыть файл, имя которого задается из командной строки

14.10.2011, 15:38. Показов 23183. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема в том, чтобы открыть файл, имя которого пользователь впечатывает в консоли
Когда пытаюсь сделать это с помощью потоков, все открывается, но только если в имени файла нет русских букв. Кодировка многобайтовая, это обязательно для работы приложения.
C++
1
2
3
4
void OTKR(const unsigned char* IMYA)
{
    file.open((char*)IMYA, fstream::in | fstream::out | fstream::app);
}
Когда делаю это с помощью указателей, вообще ничего не открывается, но если я впишу в программе путь заранее, открывается и с русскими буквами в пути.
C++
1
2
3
4
void OTKR(const unsigned char* IMYA)
{
    F=fopen((const char*)IMYA,"r+");    
}
Если вызову функцию так:
C++
1
OTKR((const unsigned char *)"C:\\Users\\Дима\\Desktop\\1.txt");
то все будет работать, но мне нужно чтоб из консоли задавался путь.
Что можно сделать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.10.2011, 15:38
Ответы с готовыми решениями:

Открыть файл, имя которого задается с клавиатуры. Переписать в новый файл только те слова, которые состоят из цифр
В коде надо сделать так, чтобы он находил цифры, а не игнорировал их, и, по возможности выводил на экран, или другой нормальный вывод...

Открыть файл, имя которого задается с клавиатуры. Посчитать количество байт в этом файле. Первую половину прочитанного файла записать в другой файл.
ребят помогите! плиз!!1. Открыть файл, имя которого задается с клавиатуры. Посчитать и вывести на эк-ран количество байт в этом файле....

Лабораторная работа номер 5 задание 1! Открыть файл, имя которого задается с клавиатуры. Посчитать и вывести на эк-ран количество байт в этом файле
Лабораторная работа номер 5 задание 1!!!! Открыть файл, имя которого задается с клавиатуры. Посчитать и вывести на эк-ран количество...

10
5 / 5 / 0
Регистрация: 12.10.2011
Сообщений: 46
14.10.2011, 15:42
IMYA - у тебя char?
попробуй string мб?
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
14.10.2011, 17:16
вот
C++
1
2
3
4
5
6
7
8
9
int main(int argc, char *argv[])
{
    FILE *f;
    argv[1]="c:\\keys.txt";
    f=fopen(argv[1],"rt");
    std::cout << f;
    getch();
    return 0;
}
0
1 / 1 / 0
Регистрация: 30.06.2010
Сообщений: 19
14.10.2011, 20:04  [ТС]
Цитата Сообщение от Van111 Посмотреть сообщение
вот
C++
1
2
3
4
5
6
7
8
9
int main(int argc, char *argv[])
{
    FILE *f;
    argv[1]="c:\\keys.txt";
    f=fopen(argv[1],"rt");
    std::cout << f;
    getch();
    return 0;
}
Не работает, не открывает файл.
И все равно эт не то, чего бы мне хотелось, здесь задается имя файла в коде, а я хочу, чтобы из консоли.
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
14.10.2011, 21:51
ну блин вы программист программистский
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cstdlib>
#include <iostream>
#include "stdio.h"
#include "conio.h"
 
using namespace std;
int main(int argc, char *argv[])
{
    FILE *f;
    char s[20];
    cin >> s;
    f=fopen(s,"rt");
    std::cout << f;
    getch();
    return 0;
}
если это вас не устроит то я повешусь
0
Android Programmer
141 / 142 / 10
Регистрация: 08.12.2010
Сообщений: 421
14.10.2011, 21:55
после получения строки, попробуйте OemToAnsi.
более чем уверен, что решит проблему.
просто когда вы пишете сразу в коде, кодировка нормальная.
когда через консоль, то Oem, а коды символов там не совпадают.
2
Заблокирован
14.10.2011, 21:56
Цитата Сообщение от NegativeCreep Посмотреть сообщение
Проблема в том, чтобы открыть файл, имя которого пользователь впечатывает в консоли
Когда пытаюсь сделать это с помощью потоков, все открывается, но только если в имени файла нет русских букв. Кодировка многобайтовая, это обязательно для работы приложения.
C++
1
2
3
4
void OTKR(const unsigned char* IMYA)
{
    file.open((char*)IMYA, fstream::in | fstream::out | fstream::app);
}
Когда делаю это с помощью указателей, вообще ничего не открывается, но если я впишу в программе путь заранее, открывается и с русскими буквами в пути.
C++
1
2
3
4
void OTKR(const unsigned char* IMYA)
{
    F=fopen((const char*)IMYA,"r+");    
}
Если вызову функцию так:
C++
1
OTKR((const unsigned char *)"C:\\Users\\Дима\\Desktop\\1.txt");
то все будет работать, но мне нужно чтоб из консоли задавался путь.
Что можно сделать?
Прежде, чем сюда писать, вы хоть проделайте минимальную работу, то есть определите ошибку, которую генерирует открытие файла с помощью fopen. Почему мы должнеы гадать на кофейной гуще?!!!
1
1 / 1 / 0
Регистрация: 30.06.2010
Сообщений: 19
15.10.2011, 01:42  [ТС]
Цитата Сообщение от Сыроежка Посмотреть сообщение
Прежде, чем сюда писать, вы хоть проделайте минимальную работу, то есть определите ошибку, которую генерирует открытие файла с помощью fopen. Почему мы должнеы гадать на кофейной гуще?!!!
не выдает ошибок никаких, все компилируется и запускается, однако если в пути к файлу есть папки на русском языке, он его не открывает и действий никаких не производит над ним, т.е. когда я вызываю fopen или fread какие-то действия производятся, но с нужным файлом ничего не происходит
после получения строки, попробуйте OemToAnsi.
более чем уверен, что решит проблему.
просто когда вы пишете сразу в коде, кодировка нормальная.
когда через консоль, то Oem, а коды символов там не совпадают.
Функция и вправду переводит из Oem в Ansi, однако в консоль выводится не то и что самое печальное, с файлом работа так и не производится
Миниатюры
Открыть файл, имя которого задается из командной строки   Открыть файл, имя которого задается из командной строки  
0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,307
15.10.2011, 03:21
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main(int argc, char* argv[])
{
   char s[250], t[250];
   cin.getline(s,250);
   OemToChar(s,t);
   fstream file(t);
   if (file.is_open())
   {
      cout << "The file " << s << " successful open." << endl;
      file.close();
   }
   return 0;
}
1
1 / 1 / 0
Регистрация: 30.06.2010
Сообщений: 19
15.10.2011, 03:48  [ТС]
Добавлено через 2 минуты
Цитата Сообщение от kazak Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main(int argc, char* argv[])
{
   char s[250], t[250];
   cin.getline(s,250);
   OemToChar(s,t);
   fstream file(t);
   if (file.is_open())
   {
      cout << "The file " << s << " successful open." << endl;
      file.close();
   }
   return 0;
}
заработало, огромное спасибо!
1
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,307
15.10.2011, 03:48
Зайдем с другой стороны, какой компилятор?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2011, 03:48
Помогаю со студенческими работами здесь

Открыть файл, имя которого задается из командной строки
В файле записана непустая последовательность целых чисел. Нужно открыть файл на чтение, НО имя файла задается в командной строке. ...

CreateFile - открыть файл, получив имя из командной строки
Здравствуйте! Я только начал программировать на WinAPI, поэтому пока не могу разобраться со следующим вопросом. Мне требуется...

Как прочитать файл, имя которого задано в параметрах командной строки?
Всем привет, кто-нибудь знает, как прочитать файл, имя которого задано в параметрах командной строки?

Ввод с клавиатуры содержимого текстового файла, имя которого задается в командной строке, используя системные вызовы и в
ПОМОГИТЕ ПОЖАЛУЙСТА Ввод с клавиатуры содержимого текстового файла, имя которого задается в командной строке, используя системные вызовы...

Ввод с клавиатуры содержимого текстового файла, имя которого задается в командной строке, используя системные вызовы
ПОМОГИТЕ, ПОЖАЛУЙСТА, ПОНЯТЬ. У МЕНЯ ЕСТЬ ЗАДАЧА &quot;Ввод с клавиатуры содержимого текстового файла, имя которого задается в командной строке,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru