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

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

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

Author24 — интернет-сервис помощи студентам
Проблема в том, чтобы открыть файл, имя которого пользователь впечатывает в консоли
Когда пытаюсь сделать это с помощью потоков, все открывается, но только если в имени файла нет русских букв. Кодировка многобайтовая, это обязательно для работы приложения.
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2011, 15:38
Ответы с готовыми решениями:

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

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

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

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

10
5 / 5 / 0
Регистрация: 12.10.2011
Сообщений: 46
14.10.2011, 15:42 2
IMYA - у тебя char?
попробуй string мб?
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 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;
}
0
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;
}
Не работает, не открывает файл.
И все равно эт не то, чего бы мне хотелось, здесь задается имя файла в коде, а я хочу, чтобы из консоли.
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 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;
}
если это вас не устроит то я повешусь
0
Android Programmer
141 / 142 / 10
Регистрация: 08.12.2010
Сообщений: 421
14.10.2011, 21:55 6
после получения строки, попробуйте OemToAnsi.
более чем уверен, что решит проблему.
просто когда вы пишете сразу в коде, кодировка нормальная.
когда через консоль, то Oem, а коды символов там не совпадают.
2
Заблокирован
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. Почему мы должнеы гадать на кофейной гуще?!!!
1
1 / 1 / 0
Регистрация: 30.06.2010
Сообщений: 19
15.10.2011, 01:42  [ТС] 8
Цитата Сообщение от Сыроежка Посмотреть сообщение
Прежде, чем сюда писать, вы хоть проделайте минимальную работу, то есть определите ошибку, которую генерирует открытие файла с помощью fopen. Почему мы должнеы гадать на кофейной гуще?!!!
не выдает ошибок никаких, все компилируется и запускается, однако если в пути к файлу есть папки на русском языке, он его не открывает и действий никаких не производит над ним, т.е. когда я вызываю fopen или fread какие-то действия производятся, но с нужным файлом ничего не происходит
после получения строки, попробуйте OemToAnsi.
более чем уверен, что решит проблему.
просто когда вы пишете сразу в коде, кодировка нормальная.
когда через консоль, то Oem, а коды символов там не совпадают.
Функция и вправду переводит из Oem в Ansi, однако в консоль выводится не то и что самое печальное, с файлом работа так и не производится
Миниатюры
Открыть файл, имя которого задается из командной строки   Открыть файл, имя которого задается из командной строки  
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
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;
}
1
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;
}
заработало, огромное спасибо!
1
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
15.10.2011, 03:48 11
Зайдем с другой стороны, какой компилятор?
1
15.10.2011, 03:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2011, 03:48
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru