определение текущего каталога
Модератор: Модераторы разделов
-
mokynis
- Сообщения: 48
- ОС: KUbuntu 7.10
определение текущего каталога
есть 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());
В обоих есть строка:
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: определение текущего каталога
посмотрите на нулевой (первый) аргумент командной строки. Может поможет?
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
The answer is blowin' in the wind.
-
Voice
- Сообщения: 1073
- Статус: столлманист
- ОС: Debian GNU/Linux
Re: определение текущего каталога
mokynis писал(а): ↑01.06.2007 13:55А мне надо, чтобы QT-программа определила, откуда ее запустили. Там по идее потом должна информация из другого файла браться, а лежать он будет рядом с этой QT-программой. Имя файла задано жеско, а вот где в каком каталоге все это будет лежать, заранее не известно. Может какой-нибудь другой способ есть узнать местоположение?
если вам нужно открыт файл, который лежит в одно каталоге с програмой то просто указывайте имя без путя.
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
М. В. Ломоносов
-
Voice
- Сообщения: 1073
- Статус: столлманист
- ОС: Debian GNU/Linux
Re: определение текущего каталога
Там по-моему просто имя исполняемого файла.....
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
М. В. Ломоносов
-
aLexx programmer
- Сообщения: 985
- Статус: Турук-Макто
- ОС: Gentoo -> Ubuntu
-
uptime
- Сообщения: 1661
- Статус: Drinker with computing problems
- ОС: kubuntu 8.04
Re: определение текущего каталога
QT программа выдаёт вам текущий каталог, как и обещала. Просто она его меняет на домашний, видимо, во время инициализации.
Можно придумать следующий трюк. Завести некий класс, от которого объявить глобальную статическую переменную. В классе должен присутствовать конструктор. Этот конструктор, по идее, должен отрабатывать до того как программа получит управление. Попытаться в этом конструкторе прочитать имя текущего каталога. Не факт, что получится...
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
The answer is blowin' in the wind.
-
d_n_k
- Сообщения: 636
- ОС: Gentoo GNU/Linux
Re: определение текущего каталога
никогда так не делайте.
в argv[0] может находится все что угодно, в том числе и путь до исполняемого файла. все зависит от того что туда засунет тот кто запустил этот файл
все сказанное есть имхо...
-
uptime
- Сообщения: 1661
- Статус: Drinker with computing problems
- ОС: kubuntu 8.04
Re: определение текущего каталога
Вы уверены, что это правильное решение?
1. Если информация зависит от пользователя (настройки) её лучше держать в домашнем каталоге.
2. Если информация общая для всех пользователей данного компьютера, её можно поместить в /etc/.
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
The answer is blowin' in the wind.
-
Voice
- Сообщения: 1073
- Статус: столлманист
- ОС: Debian GNU/Linux
Re: определение текущего каталога
А что если запустить pwd через popen?
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
М. В. Ломоносов
-
eduard_pustobaev
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
Re: определение текущего каталога
В дисгармонии со вселенной.
-
mokynis
- Сообщения: 48
- ОС: KUbuntu 7.10
Re: определение текущего каталога
<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. Так вот этот файл я найти и не могу.
Пробовал:
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: определение текущего каталога
А файл существует?
Я в консольной проге работал так с файлом, который лежел виесте с програмой и все было нормально.
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
М. В. Ломоносов
-
mokynis
- Сообщения: 48
- ОС: KUbuntu 7.10
Re: определение текущего каталога
<А файл существует?
Я в консольной проге работал так с файлом, который лежел виесте с програмой и все было нормально.>
Обижаете, сэр, конечно существует. В общем, я решил проблему через глобальную переменную в main.cpp - я там в нее передал argv[0]. Хоть так и не советуют, но там, по крайней мере, нужный мне путь.
Спасибо за советы.
Я в консольной проге работал так с файлом, который лежел виесте с програмой и все было нормально.>
Обижаете, сэр, конечно существует. В общем, я решил проблему через глобальную переменную в main.cpp - я там в нее передал argv[0]. Хоть так и не советуют, но там, по крайней мере, нужный мне путь.
Спасибо за советы.
-
wRAR
- Сообщения: 372
- ОС: ALT Linux Sisyphus
Re: определение текущего каталога
Т.е. вы не понимаете значение слова "может"?
ALT Linux Team
SIM-IM Development Team
Antilamer
SIM-IM Development Team
Antilamer
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
-
wRAR
- Сообщения: 372
- ОС: ALT Linux Sisyphus
Re: определение текущего каталога
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
И где тут путь?
#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
SIM-IM Development Team
Antilamer
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: определение текущего каталога
a.out
Это не совсем надёжно, зато переносимо. Qt использьует именно этот алгоритм например.