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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 51, средняя оценка - 4.96
NegativeCreep
1 / 1 / 0
Регистрация: 30.06.2010
Сообщений: 19
14.10.2011, 15:38     Открыть файл, имя которого задается из командной строки #1
Проблема в том, чтобы открыть файл, имя которого пользователь впечатывает в консоли
Когда пытаюсь сделать это с помощью потоков, все открывается, но только если в имени файла нет русских букв. Кодировка многобайтовая, это обязательно для работы приложения.
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");
то все будет работать, но мне нужно чтоб из консоли задавался путь.
Что можно сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2011, 15:38     Открыть файл, имя которого задается из командной строки
Посмотрите здесь:

C++ Открыть файл, имя которого задается с клавиатуры. Посчитать количество байт в этом файле. Первую половину прочитанного файла записать в другой файл.
Лабораторная работа номер 5 задание 1! Открыть файл, имя которого задается с клавиатуры. Посчитать и вывести на эк-ран количество байт в этом файле C++
Работа с файлами, название файла задается в командной строке C++
Написать программу которая читает из командной строки два аргумента: имя переменной и значение этой переменой C++
C++ Вывод в файл из командной строки по указанному в ней пути
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mut
5 / 5 / 0
Регистрация: 12.10.2011
Сообщений: 46
14.10.2011, 15:42     Открыть файл, имя которого задается из командной строки #2
IMYA - у тебя char?
попробуй string мб?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
14.10.2011, 17:16     Открыть файл, имя которого задается из командной строки #3
вот
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;
}
NegativeCreep
1 / 1 / 0
Регистрация: 30.06.2010
Сообщений: 19
14.10.2011, 20:04  [ТС]     Открыть файл, имя которого задается из командной строки #4
Цитата Сообщение от 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;
}
Не работает, не открывает файл.
И все равно эт не то, чего бы мне хотелось, здесь задается имя файла в коде, а я хочу, чтобы из консоли.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
14.10.2011, 21:51     Открыть файл, имя которого задается из командной строки #5
ну блин вы программист программистский
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;
}
если это вас не устроит то я повешусь
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
14.10.2011, 21:55     Открыть файл, имя которого задается из командной строки #6
после получения строки, попробуйте OemToAnsi.
более чем уверен, что решит проблему.
просто когда вы пишете сразу в коде, кодировка нормальная.
когда через консоль, то Oem, а коды символов там не совпадают.
Сыроежка
Заблокирован
14.10.2011, 21:56     Открыть файл, имя которого задается из командной строки #7
Цитата Сообщение от 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. Почему мы должнеы гадать на кофейной гуще?!!!
NegativeCreep
1 / 1 / 0
Регистрация: 30.06.2010
Сообщений: 19
15.10.2011, 01:42  [ТС]     Открыть файл, имя которого задается из командной строки #8
Цитата Сообщение от Сыроежка Посмотреть сообщение
Прежде, чем сюда писать, вы хоть проделайте минимальную работу, то есть определите ошибку, которую генерирует открытие файла с помощью fopen. Почему мы должнеы гадать на кофейной гуще?!!!
не выдает ошибок никаких, все компилируется и запускается, однако если в пути к файлу есть папки на русском языке, он его не открывает и действий никаких не производит над ним, т.е. когда я вызываю fopen или fread какие-то действия производятся, но с нужным файлом ничего не происходит
после получения строки, попробуйте OemToAnsi.
более чем уверен, что решит проблему.
просто когда вы пишете сразу в коде, кодировка нормальная.
когда через консоль, то Oem, а коды символов там не совпадают.
Функция и вправду переводит из Oem в Ansi, однако в консоль выводится не то и что самое печальное, с файлом работа так и не производится
Миниатюры
Открыть файл, имя которого задается из командной строки   Открыть файл, имя которого задается из командной строки  
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.10.2011, 03:21     Открыть файл, имя которого задается из командной строки #9
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;
}
NegativeCreep
1 / 1 / 0
Регистрация: 30.06.2010
Сообщений: 19
15.10.2011, 03:48  [ТС]     Открыть файл, имя которого задается из командной строки #10
Добавлено через 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;
}
заработало, огромное спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2011, 03:48     Открыть файл, имя которого задается из командной строки
Еще ссылки по теме:

C++ Разбор командной строки\Вывод в файл координат
Лог файл и аргументы командной строки C++
Вывести треугольник Паскаля количество строк которого задается пользователем C++

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

Или воспользуйтесь поиском по форуму:
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.10.2011, 03:48     Открыть файл, имя которого задается из командной строки #11
Зайдем с другой стороны, какой компилятор?
Yandex
Объявления
15.10.2011, 03:48     Открыть файл, имя которого задается из командной строки
Ответ Создать тему
Опции темы

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