определение текущего каталога

Модератор: Модераторы разделов

mokynis
Сообщения: 48
ОС: KUbuntu 7.10

определение текущего каталога

Сообщение mokynis »

есть 2 исполняемых файла. Оба лежат в одном и том же каталоге. Один сделан в текстовом редакторе, второй-проект QT (версия 3.3.4 - с ASP Linux 11 в комплекте шла).
В обоих есть строка:
cout<QString tmp=QString::fromLocal8Bit(get_current_dir_name()); //это в проекте QT
Первый выдает действительно каталог, из которого его запускаю (через ./<файл>), второй пишет мне мой домашний каталог. А мне надо, чтобы QT-программа определила, откуда ее запустили. Там по идее потом должна информация из другого файла браться, а лежать он будет рядом с этой QT-программой. Имя файла задано жеско, а вот где в каком каталоге все это будет лежать, заранее не известно. Может какой-нибудь другой способ есть узнать местоположение?
Пробовал
QString tmp=QDir::currentDirPath();
QString tmp1=QDir::current().absPath();
QString tmp2=QDir::current().dirName();
Не помогает.

извиняюсь, опечатка. В "текстовом" варианте
cout<<get_current_dir_name();
в QT
QString tmp=QString::fromLocal8Bit(get_current_dir_name());
Спасибо сказали:
Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: определение текущего каталога

Сообщение uptime »

посмотрите на нулевой (первый) аргумент командной строки. Может поможет?
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: определение текущего каталога

Сообщение Voice »

mokynis писал(а):
01.06.2007 13:55
А мне надо, чтобы QT-программа определила, откуда ее запустили. Там по идее потом должна информация из другого файла браться, а лежать он будет рядом с этой QT-программой. Имя файла задано жеско, а вот где в каком каталоге все это будет лежать, заранее не известно. Может какой-нибудь другой способ есть узнать местоположение?

если вам нужно открыт файл, который лежит в одно каталоге с програмой то просто указывайте имя без путя.
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: определение текущего каталога

Сообщение Voice »

uptime писал(а):
01.06.2007 15:09
посмотрите на нулевой (первый) аргумент командной строки. Может поможет?

Там по-моему просто имя исполняемого файла.....
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
Аватара пользователя
aLexx programmer
Сообщения: 985
Статус: Турук-Макто
ОС: Gentoo -> Ubuntu

Re: определение текущего каталога

Сообщение aLexx programmer »

mokynis писал(а):
01.06.2007 13:55
Может какой-нибудь другой способ есть узнать местоположение?


Попробуйте getcwd. Так, на всякий случай.
Спасибо сказали:
Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: определение текущего каталога

Сообщение uptime »

mokynis писал(а):
01.06.2007 13:55
...
Первый выдает действительно каталог, из которого его запускаю (через ./<файл>), второй пишет мне мой домашний каталог. А мне надо, чтобы QT-программа определила, откуда ее запустили.
...

QT программа выдаёт вам текущий каталог, как и обещала. Просто она его меняет на домашний, видимо, во время инициализации.
Можно придумать следующий трюк. Завести некий класс, от которого объявить глобальную статическую переменную. В классе должен присутствовать конструктор. Этот конструктор, по идее, должен отрабатывать до того как программа получит управление. Попытаться в этом конструкторе прочитать имя текущего каталога. Не факт, что получится...
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:
d_n_k
Сообщения: 636
ОС: Gentoo GNU/Linux

Re: определение текущего каталога

Сообщение d_n_k »

uptime писал(а):
01.06.2007 15:09
посмотрите на нулевой (первый) аргумент командной строки. Может поможет?

никогда так не делайте.

в argv[0] может находится все что угодно, в том числе и путь до исполняемого файла. все зависит от того что туда засунет тот кто запустил этот файл
все сказанное есть имхо...
Спасибо сказали:
Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: определение текущего каталога

Сообщение uptime »

mokynis писал(а):
01.06.2007 13:55
...
Там по идее потом должна информация из другого файла браться, а лежать он будет рядом с этой QT-программой.
...

Вы уверены, что это правильное решение?
1. Если информация зависит от пользователя (настройки) её лучше держать в домашнем каталоге.
2. Если информация общая для всех пользователей данного компьютера, её можно поместить в /etc/.
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: определение текущего каталога

Сообщение Voice »

А что если запустить pwd через popen?
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: определение текущего каталога

Сообщение eduard_pustobaev »

Voice писал(а):
01.06.2007 18:53
А что если запустить pwd через popen?

В qt для этого QProcess есть:

Код: Выделить всё

QProcess::start(program, arguments)
В дисгармонии со вселенной.
Спасибо сказали:
mokynis
Сообщения: 48
ОС: KUbuntu 7.10

Re: определение текущего каталога

Сообщение mokynis »

<Voice:если вам нужно открыт файл, который лежит в одно каталоге с програмой то просто указывайте имя без путя.>
Пробовал:
fp = fopen("f1", "r");
if (fp == NULL)
{
QMessageBox::warning(this,"Mistake","Can't open file"); --> именно это и сообщается
return;
}

<d_n_k: в argv[0] может находится все что угодно, в том числе и путь до исполняемого файла. все зависит от того что туда засунет тот кто запустил этот файл>
Смотрел в дебаггере-при запуске файла main.cpp в argv[0] именно тот путь, что нужен. Только как его выловить в файле-реализации формы? Как только ".ui.h" запускается, сразу все аргументы командной строки становятся неизвестны. А как их оттуда увидеть я не знаю :(

<uptime: Вы уверены, что это правильное решение?
1. Если информация зависит от пользователя (настройки) её лучше держать в домашнем каталоге.
2. Если информация общая для всех пользователей данного компьютера, её можно поместить в /etc/.>
Я не волшебник, я только учусь. Как я понял, UNIX-путь это когда вообще-то программа может сделать все в консоли, а для красивости к ней делают формочку. Вот я и сделал (учусь я, учусь!) программку, которая ищет в тексте нужный кусок (из-под C++ запускает команду Shell), это кусок записывает в файл. Файл, создается там же, где запущена программа. А QT-форма должна из этого файла строки вывести в textEdit. Так вот этот файл я найти и не могу.
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: определение текущего каталога

Сообщение Voice »

mokynis писал(а):
04.06.2007 15:55
Пробовал:
fp = fopen("f1", "r");
if (fp == NULL)
{
QMessageBox::warning(this,"Mistake","Can't open file"); --> именно это и сообщается
return;
}

А файл существует?

Я в консольной проге работал так с файлом, который лежел виесте с програмой и все было нормально.
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
mokynis
Сообщения: 48
ОС: KUbuntu 7.10

Re: определение текущего каталога

Сообщение mokynis »

<А файл существует?
Я в консольной проге работал так с файлом, который лежел виесте с програмой и все было нормально.>
Обижаете, сэр, конечно существует. В общем, я решил проблему через глобальную переменную в main.cpp - я там в нее передал argv[0]. Хоть так и не советуют, но там, по крайней мере, нужный мне путь.
Спасибо за советы.
Спасибо сказали:
wRAR
Сообщения: 372
ОС: ALT Linux Sisyphus

Re: определение текущего каталога

Сообщение wRAR »

mokynis писал(а):
04.06.2007 15:55
<d_n_k: в argv[0] может находится все что угодно, в том числе и путь до исполняемого файла. все зависит от того что туда засунет тот кто запустил этот файл>
Смотрел в дебаггере-при запуске файла main.cpp в argv[0] именно тот путь, что нужен.

Т.е. вы не понимаете значение слова "может"?
ALT Linux Team
SIM-IM Development Team
Antilamer
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: определение текущего каталога

Сообщение v04bvs »

d_n_k писал(а):
01.06.2007 18:00
в argv[0] может находится все что угодно, в том числе и путь до исполняемого файла. все зависит от того что туда засунет тот кто запустил этот файл

Вообще говоря вменяемый пользователь\программа будет запускать с правильным argv[0], и на это можно рассчитывать.
Спасибо сказали:
wRAR
Сообщения: 372
ОС: ALT Linux Sisyphus

Re: определение текущего каталога

Сообщение wRAR »

wrar@wrars-comp ~/tmp $ <1.c
#include <stdio.h>

int main(int argc, char* argv[])
{
printf("%s\n", argv[0]);
return 0;
}
wrar@wrars-comp ~/tmp $ gcc 1.c
wrar@wrars-comp ~/tmp $ PATH=. a.out
a.out

И где тут путь?
ALT Linux Team
SIM-IM Development Team
Antilamer
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: определение текущего каталога

Сообщение v04bvs »

wRAR писал(а):
08.06.2007 10:03
wrar@wrars-comp ~/tmp $ <1.c
#include <stdio.h>

int main(int argc, char* argv[])
{
printf("%s\n", argv[0]);
return 0;
}
wrar@wrars-comp ~/tmp $ gcc 1.c
wrar@wrars-comp ~/tmp $ PATH=. a.out
a.out

И где тут путь?

a.out
Это не совсем надёжно, зато переносимо. Qt использьует именно этот алгоритм например.
Спасибо сказали: