[C++] Dynamiczne tworzenie polecenia, które ma zostać uruchomione
Ostatnio zmodyfikowano 2013-05-03 19:35
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. |
|
m4tx |
» 2013-05-03 09:29:19 system( "exiv2 -pt " + zmienna + " > foto.txt" ); ? |
|
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? |
|
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() .. |
|
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ć :) |
|
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ź. |
|
« 1 » |