• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

program nie może otworzyć plików

Object Storage Arubacloud
0 głosów
431 wizyt
pytanie zadane 29 listopada 2020 w C i C++ przez kiuyama Nowicjusz (190 p.)

Muszę napisać program analizujący czy podany graf nieskierowany jest dwudzielny czy nie. Problem polega na tym, że program nie jest w stanie otworzyć podanych plików. Próbowałem zapisywać je w folderze projektu jak i w folderze z plikiem exe, ale nic to nie daje. Projekt jest podzielony na pliki Header, funkcje i main. Próbowałem również utworzyć projekt w jednym pliku, na nic sie to zdało. Przypuszczam, że jest to jakiś banalny błąd, aczkolwiek nie jestem w stanie go wychwycić... Program uruchamia się w konsoli w następujący sposób: graf_dwudzielny.exe -i Graf.txt -o Wynik.txt

 Oto kod:

#include <iostream>
#include <list>
#include <vector>
#include <sstream>
#include <fstream>
#include <string>
#include <locale.h>;

using namespace std;

struct Parametry {
    string Graf, Wynik;
};

bool Parsuj(Parametry& p, const vector<string>& params) {
    if (!params.size())
        return false;
    for (int i = 0; i < params.size() - 1; ++i)
        if (params[i] == "-i")
            p.Graf = params[++i];
        else if (params[i] == "-o")
            p.Wynik = params[++i];

    return p.Graf != "" && p.Wynik != "";
}

int przepisz(const string& Graf, const string& Wynik, vector<list<int>>& graf) {
    ifstream in(Graf);
    if (!in)
    {
        cerr << "Nie mozna otworzyc pliku " << Graf << "\n";
        return 1;
    }

    ofstream out(Wynik);
    if (!out)
    {
        cerr << "Nie mozna otworzyc pliku " << Wynik << "\n";
        return 1;
    }
}

int main(int argc, char* argv[]) {
    setlocale(LC_ALL, "polish");

    vector<list<int>> graf;
    vector<int> połączone;

    vector<string> parametry;
    for (int i = 1; i < argc; ++i)
    {
        parametry.push_back(argv[i]);
    }

    Parametry p;
    if (!Parsuj(p, parametry))
    {
        cerr << "Bledne parametry\n";
        cerr << "Uzyj: " << argv[0] << " -i <plik wejściowy> -o <plik wyjściowy>\n";
        return 1;
    }

    przepisz(p.Graf, p.Wynik, graf);

}
komentarz 29 listopada 2020 przez tkz Nałogowiec (42,000 p.)
Oprócz tego, że kod jest fatalny, to Twój problem, przynajmniej u mnie nie występuje. Nie otwiera się, znaczy, że wyświetla komunikat "Nie mozna otworzyc pliku(...) "?
komentarz 29 listopada 2020 przez kiuyama Nowicjusz (190 p.)
tak, wyświetla taki komunikat. I jeżeli mógłbym wiedzieć, dlaczego kod jest fatalny? Właściwie to te funkcje są napisane przez wykładowce z laboratorium z programowania, więc nie wiem co mogłoby być nie tak
komentarz 29 listopada 2020 przez tkz Nałogowiec (42,000 p.)
Odpowiadając na główne pytanie. Prawdopodobnie masz literówkę w nazwie pliku Graf.txt, lub Wynik.txt. Możliwe również, że plik .exe nie znajduje się w tym samym katalogu co pliki .txt.

Co do kodu. Polskie litery jako zmienne; globalny namespace; nazwa funkcji pisana wielką literą(samo w sobie nie jest błędem, gdyby inne funkcję również były pisane wielką literą, brak konsekwencji); komunikacja o błędach jako liczby, okey, ale da się to zrobić lepiej, poza tym i tak te błędy nie są obsługiwane; dwie zmienne różniące się jedynie wielkością pierwszej litery.
komentarz 29 listopada 2020 przez kiuyama Nowicjusz (190 p.)
aaa, myślałem, że może chodzić bardziej o funkcje. Mam świadomość, że nazewnictwo nie jest idealne, robiłem to na szybko, bo cały czas zastanawiałem się dlaczego te pliki sie nie chcą otworzyć. Co do polskich znaków, to dałem sobie spokój z wymyślaniem czegoś bez nich, ten program jest tylko na zaliczenie. Funkcje i struktury będą rozdzielone do swoich plików. Nie wiem tylko dlaczego namespace jest nie najlepszym pomysłem, zazwyczaj widziałem takie rozwiązanie. Dzięki za rady, może jak pozmieniam parę rzeczy, to zadziała.
komentarz 29 listopada 2020 przez kiuyama Nowicjusz (190 p.)
Sprawdziłem czy występują literówki, nie znalazłem. Jeszcze raz spojrzałem do folderu Debug, w którym znajduje się plik .exe i są tam pliki .txt. Czy to może być wina samego visual studio?
komentarz 29 listopada 2020 przez tkz Nałogowiec (42,000 p.)
A na pewno odpalasz plik z folderu debug? Moim zdaniem popełniasz jakiś błąd przy samym uruchomieniu programu. Nie ten folder na przykład.
komentarz 29 listopada 2020 przez kiuyama Nowicjusz (190 p.)
wiersz poleceń odpalam z poziomu tego folderu, czyli tam gdzie jest jego adres wpisuję cmd.

Wyświetla się coś takiego:

N:\projekty\c++\lab1\b6dd5c83-gr22-repo\projekt\graf_dwudzielny\Debug>

I tam po > wpisuję:

graf_dwudzielny.exe -i Graf.txt -o Wynik.txt

W teorii powinno działać, ale praktyka swoje...
komentarz 29 listopada 2020 przez tkz Nałogowiec (42,000 p.)
Pokaż zrzut ekranu z tego folderu.
komentarz 29 listopada 2020 przez kiuyama Nowicjusz (190 p.)

Pozmieniałem już nazwy plików na takie z małymi literami, w samym programie również.

komentarz 29 listopada 2020 przez tkz Nałogowiec (42,000 p.)

Co? Dlaczego zmieniałeś cokolwiek w kodzie? 

Po wykonaniu polecenia tworzy się "Wynik.txt"

komentarz 30 listopada 2020 przez kiuyama Nowicjusz (190 p.)
ehh... nie mam pojęcia. Jeżeli u ciebie wszystko działa, a posiadasz dokładnie ten sam kod, to nie wiem co może być przyczyną. Spróbuję zainstalować visual studio od nowa.
komentarz 30 listopada 2020 przez tkz Nałogowiec (42,000 p.)
Czekaj, czekaj. graf_dwudzielny.exe -i Graf.txt -o Wynik.txt. Pierwszy argument jest wielką literą, w folderze jest małą.
komentarz 30 listopada 2020 przez kiuyama Nowicjusz (190 p.)
Wcześniej było wszystko z dużej i nie działało, więc zmieniłem tam gdzie trzeba litery z dużych na małe i postarałem się, żeby inne nazwy się bardziej różniły. Nic to nie dało. Wykonywałem kod linijka po linijce, a i tak przy próbie otworzenia pliku tekstowego wywala ten błąd.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 166 wizyt
pytanie zadane 10 stycznia 2018 w C i C++ przez Artur313 Użytkownik (790 p.)
0 głosów
0 odpowiedzi 180 wizyt
pytanie zadane 22 czerwca 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)
0 głosów
1 odpowiedź 186 wizyt
pytanie zadane 11 marca 2017 w C i C++ przez Meltern Początkujący (440 p.)

92,624 zapytań

141,478 odpowiedzi

319,821 komentarzy

62,005 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...