Błąd "Invalid argument"

0

Witam. Mam taki problem. W argumencie uruchomienia programu użytkownik ma podawać nazwę pliku do otworzenia. Argument ma wyglądać tak: /i"nazwa". Ten fragment kodu najpierw wycina 2 pierwsze znaki z argumentu żeby zostało tylko nazwa, potem dodaje na początku i na końcu cydzysłowy, żeby potem przekazać to do fopen, ale przy uruchomieniu programu dostaje błąd "Error opening file: Invalid argument". Proszę o pomoc.

         string path=string(argv[1]).substr(sizeof(char)*2);

        
        string pathP='"'+path+'"';
        
        FILE *in;
        int rozmiar=pathP.length();
        char *plik= new char[rozmiar];
  
         int i=0;
         while(plik[i]=pathP[i]){i++;}

         in=fopen(plik, "r");
0

Aby dodać znak cudzysłowu musisz dać albo między ' ', albo między " " znak "

string pathP = '\"' + path + "\""; 

Ale plik nie może posiadać w nazwie znaków : \ / : * ? " < > | , więc nie wiem dlaczego dokładasz cudzysłów do nazwy pliku

0

Nie całkiem o to chodzi, bo dodawanie cudzysłowów rozwiązałem dobrze, bo gdy sobie w programie wypiszę zmienna pathP to ona ma wartość w formacie "nazwa" (z dodanymi cudzysłowami). A cudzysłowy dodaje bo wymaga tego fopen.

0

Bzdura, fopen nie wymaga "

0

Czyli nie ważne czy do fopen będzie przekazane test.txt czy "test.txt"?

Sprawdziłem, tym wykonywanie programu zatrzymało się już na fopen, i perror [if (in == NULL) perror ("Error opening file");] nawet nie wyświetlił żadnego błędu. Nadal proszę o pomoc.

0

Jak podajesz nazwe pliku jako stala podajesz const char*, a to jest wlasnie "plik.costam", natomiast jezeli podajesz zmnienna, to ona musi byc typu char* wiec nie mozesz do niej dodawac cudzyslowu, bo nazwa pliku nie moze zawierac znakow jakie podalem w poscie wyzej

0

Wróć do pierwszej lekcji programowania i przeczytaj rozdział o zmiennych. Może wtedy zrozumiesz różnicę między zmienną łańcuchową zmienna, a stałą łańcuchową "zmienna"

0
MJay napisał(a)

Jak podajesz nazwe pliku jako stala podajesz const char*, a to jest wlasnie "plik.costam", natomiast jezeli podajesz zmnienna, to ona musi byc typu char* wiec nie mozesz do niej dodawac cudzyslowu, bo nazwa pliku nie moze zawierac znakow jakie podalem w poscie wyzej

I nie dodaje już cudzysłowu a nadal nie otwiera pliku.

0
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
     FILE* pFile;
     pFile = fopen(argv[1], "r");
// Jakieś operacje na pliku
     fclose(pFile);
     return 0;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.