Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Dynamiczne tworzenie polecenia, które ma zostać uruchomione

Ostatnio zmodyfikowano 2013-05-03 19:35
Autor Wiadomość
apb
Temat założony przez niniejszego użytkownika
[C++] Dynamiczne tworzenie polecenia, które ma zostać uruchomione
» 2013-05-03 02:27:30
Witam Wszystkich!

Jestem w trakcie pisanie projektu w QT creatorze. Mam do napisania aplikację, która kataloguje zdjęcia według wybranych parametrów exif.

Żeby odczytać dane exif ze zdjęcia używam polecenia: system("exiv2 -pt foto.jpg > foto.txt");

Następnie otwieram ten plik i wczytuję do listy wybrane wartości.

Chciałbym aby użytkownik mógł podać lokalizację w której znajdują się zdjęcia, następnie program zrobiłby listę tych plików i po kolei przekazywał do polecenia system(). I tutaj napotykam na problem. Nie potrafię sobie poradzić z tym, aby nazwę pliku dało się przekazywać przez jakąś zmienną. Próbowałem wielu różnych pomysłów, jednak nic sensownego nie udało mi się stworzyć.

Serdecznie proszę Was o pomoc. Dodam, że mam napisać program głównie strukturalnie.
P-81860
m4tx
» 2013-05-03 09:29:19
system( "exiv2 -pt " + zmienna + " > foto.txt" );
?
P-81861
apb
Temat założony przez niniejszego użytkownika
» 2013-05-03 12:08:22
No i tu jest problem. Bo zmienna w takim wypadku jest typu string a wtedy nie działa, wywala błąd: "17: błąd:cannot convert 'std::basic_string<char>' to 'const char*' for argument '1' to 'int system(const char*)'". Jeśli bym chciał cokolwiek zrobić jako char to wtedy tutaj nie działa: ifstream we(zmienna.c_str());

Jeśli już nawet zmienię zmienną ze string na char to wywala błąd: "17: błąd:invalid operands of types 'const char*' and 'const char [12]' to binary 'operator+'". Jeśli usunę + to "17: błąd:invalid operands of types 'const char*' and 'const char [12]' to binary 'operator+'".

Gdzie jest mój błąd w rozumowaniu?
P-81869
pekfos
» 2013-05-03 12:29:47
No i tu jest problem. Bo zmienna w takim wypadku jest typu string a wtedy nie działa, wywala błąd: "17: błąd:cannot convert 'std::basic_string<char>' to 'const char*' for argument '1' to 'int system(const char*)'". Jeśli bym chciał cokolwiek zrobić jako char to wtedy tutaj nie działa: ifstream we(zmienna.c_str());
Gdzie jest mój błąd w rozumowaniu?
system()
 pobiera
const char *
 a nie
std::string
, tak samo jak konstruktor
std::ifstream
. Jednak tylko w przypadku konstruktora
std::ifstream
 domyśliłeś się, że trzeba użyć metody
c_str()
..
P-81870
apb
Temat założony przez niniejszego użytkownika
» 2013-05-03 14:31:05
Napisałem tak i działa:

system(( "exiv2 -pt " + naz + ".jpg > " + naz + ".txt" ).c_str() );

oraz

ifstream we(( naz + ".txt" ).c_str() );

Dziękuję serdecznie za pomoc. Jak będę coś jeszcze potrzebował to pozwolę sobie do Was uderzyć :)
P-81885
apb
Temat założony przez niniejszego użytkownika
» 2013-05-03 19:35:12
Mam jeszcze jedno pytanie. Określając ścieżkę dostępu do zdjęcia np. tak:
d:\program\foto
 wszystko działa. Jednak jak chcę zrobić tak samo na partycji systemowej (c:) wywala mi błąd "odmowa dostępu". Czy da się polecenie system() uruchomić jako administrator? Albo jak inaczej zrobić, żeby działało? Wielkie dzięki za odpowiedź.
P-81908
« 1 »
  Strona 1 z 1