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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Открытие файла из текущей директории, msvs2005 
:(
    Опции темы
GrishinUS
Дата 18.7.2009, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброго времени,

каким образом можно передать в функцию 
Код

inputfile.open("file.txt", ios::in);


путь текущей директории?
Нужно чтобы программа искала файлик в той же папке где лежит сам .exe файл.
Думал насчет того, как вытащить его из argv[0]
более того, даже вытащил,
но есть два момента :
1) путь там с одиночными слэшами, а open "ждет" что-то типа "c:\\mypath\\myfile.txt"
2) каким образом к переменной типа string можно приписать "file.txt" да так, чтобы потом эту переменную подсунуть функции open? (идет ругань на несовместимость типов).

Это сообщение отредактировал(а) GrishinUS - 18.7.2009, 20:20
PM MAIL ICQ   Вверх
Irdis
Дата 18.7.2009, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



1. Нет... Когда мы пишем "\\" это не означает что в строке "\\"... это управляющая символьная константа(\\ - вывод символа \ )
т.е. f="\\";
то в f записано \
Зачем это надо; один из примеров, вы хотите строку из "
f=""" <- глупо, и не правильно
f="\""<- так правильно
2. Привести к одному типу http://lmgtfy.ru/?q=char+to+string

Это сообщение отредактировал(а) Irdis - 18.7.2009, 20:49
PM MAIL   Вверх
586
Дата 18.7.2009, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 8
Всего: 146



Цитата(GrishinUS @  18.7.2009,  21:16 Найти цитируемый пост)
1) путь там с одиночными слэшами, а open "ждет" что-то типа "c:\\mypath\\myfile.txt"

Символ \ в исходнике C/C++ - это специальный символ, с помощью которого можно писать непечатаемые символы - например - "\n", "\t" и т.д. Чтобы написать обратный слэш в строке, пишутся два слэша - "\\" - в итоге, в строке оказывается один слэш.
Т.е. никаких проблем не будет при использовании argv.

Цитата(GrishinUS @  18.7.2009,  21:16 Найти цитируемый пост)
каким образом к переменной типа string можно приписать "file.txt" да так, чтобы потом эту переменную подсунуть функции open? (идет ругань на несовместимость типов).

Код
std::string s;
//...
inputfile.open((s+"file.txt").c_str(), ios::in);


Добавлено через 2 минуты
Код
std::string s;
//...
inputfile.open(s.c_str(), ios::in);

PM   Вверх
maxim1000
Дата 19.7.2009, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



только стоит различать три понятия:
1. текущая директория
2. директория, в которой лежит exe-шник
3. путь к exe-шнику из argv[0]

все три могут быть разными, третьего вообще может не быть


--------------------
qqq
PM WWW   Вверх
Cheloveck
Дата 19.7.2009, 05:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Я когда-то писал подобную ботву
Код

const CString ApplicationInfo::ConfigFileName()

{

    // Возвращает имя файла конфигурации программы,

    // составленное из имени пограммы без расширения,

    // с добавлением расширения .ini

    

    static bool init = false;



    if( !init )

    {

        TCHAR *buf = configFileName_.GetBuffer(MAX_PATH + 1);

        for(DWORD i = ::GetModuleFileName(NULL, buf, MAX_PATH + 1) - 1; 

            i > 0; i--)

        {

            if(buf[i] == _T('.'))

            {

                buf[i] = _T('\0');

                break;

            }

        }

        configFileName_.ReleaseBuffer();

        configFileName_ += _T(".ini");



        init = true;

    }



    return configFileName_;

}

Правда на MFC, но CString в этом плане похож на std::string


--------------------
user posted image
PM Jabber   Вверх
andrew_121
Дата 19.7.2009, 06:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

Репутация: 10
Всего: 33



Цитата(Cheloveck @  19.7.2009,  05:57 Найти цитируемый пост)
но CString в этом плане похож на std::string 

Угу. Особенно этим:
Цитата(Cheloveck @  19.7.2009,  05:57 Найти цитируемый пост)
GetBuffer(MAX_PATH + 1);

Цитата(Cheloveck @  19.7.2009,  05:57 Найти цитируемый пост)
ReleaseBuffer();


Подкорректировал бы.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Cheloveck
Дата 19.7.2009, 06:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(andrew_121 @  19.7.2009,  07:11 Найти цитируемый пост)
Подкорректировал бы. 

Лень. И так всё ясно, нашёл символ, заменил на ноль, присвоил строке и приконкатинировал нужный хвост


--------------------
user posted image
PM Jabber   Вверх
GrishinUS
Дата 19.7.2009, 06:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

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

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

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

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


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

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


 




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


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

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