Problem z wczytywaniem pliku pod Windowsem

0

Witam, napisałem sobie program, który poprawnie wczytuje i przetwarza dane z pliku tekstowego pod Linuxem. Ten sam kod pod Windowsem ni jak nie chce działać. Sprawdziłem sobie pod windowsem taki kod(linuxowy działa na tej samej zasadzie):
[code]
FILE * plik;
plik = fopen("liczby.txt", "r");
fscanf(plik, "%d", &n);
printf("%d", n);
fclose(plik);
[/code]
który też nie działa. W pliku znajduje się tylko liczba 10, po wczytaniu wyświetla 0. O CO TU CHODZI?

0

Prawie na 100% chodzi o ukrywanie znanych rozszerzeń, twój plik nazywa się "liczby.txt.txt"

0

najpierw sprawdź czy poprawnie otwierasz plik (możesz mieć włączone budowanie w innym miejscu a plik "liczby.txt" w innym miejscu).
Reszta powinna działać bez różnic.

0

Niestety to nie to - ten sam kod na tych samych plikach pod linuxem działał bez problemu. Pytałem zresztą o to we wcześniejszych wątkach (na innne problemy się natknąłem podczas pisania). To co tutaj podałem, po prostu skróciłem, żebyzobaczyć czy działa to na pojedynczym wczytaniu liczby - niestety nie działa. Przypomnę, że chodzi o kod:
[code]
FILE * plik;
//ścieżka do pliku
plik = fopen("czworokat.in", "r");
//wczytywanie kolejnych współrzednych
fscanf(plik, "(%d,%d),(%d,%d),(%d,%d),(%d,%d) ", ax,ay,bx,by,&cx,&cy,&dx,&dy);

//zamknięcie strumienia
fclose(plik);
[/code]

po wyrzuceniu printfem tego co wczytałem z pliku dostaję coś takiego:
user image
a w pliku znjduje się: (0,0),(2,0),(3,3),(0,2).

0

A podejrzałeś ten plik pod Windowsem? być może problemem jest np znak nowej linii.

0

Tak, wyglada okej. Próbowałem kombinacji typu, dodanie spacji na końcu, jakieś puste entery po i nic. W jaki sposób, sugerowałbyś to sprawdzić?

1

Hexedytorem.

0

Błąd jest tu:

whose napisał(a):
fscanf(plik, "(%d,%d),(%d,%d),(%d,%d),(%d,%d) ", ax,ay,bx,by,&cx,&cy,&dx,&dy);

ma być: &ax,&ay,&bx,&by

1

@_13th_Dragon mnie ubiegł :)
A tu masz kod ze sprawdzaniem błędów, bo to co wskazał @_13th_Dragon nie wyjaśnia wszystkiego (cześć danych powinna się dobrze wczytać)

FILE * plik;
plik = fopen("czworokat.in", "r");
if (plik) {
    int n = fscanf(plik, "(%d,%d),(%d,%d),(%d,%d),(%d,%d) ", &ax,&ay,&bx,by,&cx,&cy,&dx,&dy);
    fclose(plik);
    if (n!=8) {
         printf("Nie wczytano wszystkich danych. Udalo się wczytac %d danych", n);
    } else {
         printf("Wszystko ok\n(%d,%d),(%d,%d),(%d,%d),(%d,%d)\n",ax,ay,bx,by,cx,cy,dx,dy);
    }
} else {
    printf("Nie udalo sie otworzyc pliku\n");
}
0

Z plikiem wyglada wszystko okej w programie. Natomiast inna dziwna rzecz jest, dodałem do pliku coś takiego:
[code]
if(plik == NULL)
{
printf("null\n");
}
[/code]
i po kompilacji i uruchomieniu wyświetla się te null w konsoli, czyli warunek jest prawdziwy... Tak jakby pliku nie było, a to dziwne, bo wczytuje ww wartości. Chociaż w innej kombinacji (1szej w poście nie wczytuje nic)

Edit:

Już sprawdzam Marek, co mi wyrzuci.

Edit2:

"Nie udało się otworzyć pliku"

0

czyli od początku miałem rację. Upewnij się co do nazwy pliku i że ten plik jest w tej lokalizacji, z której uruchamiasz plik wykonalny i/lub w tej lokalizacji co plik wykonalny.
Najlepiej spróbuj uruchamiając to z linii poleceń.

1

Sprawdź nazwę pliku przez:
Start -> Uruchom -> cmd.exe
dir "c:\scieżka_do_pliku\czworokat.in*"

Założę się ze twój plik nazywa się "czworokat.in.txt".

0

Upewniłem się(+dowód http://screenshu.com/static/uploads/temporary/j8/xq/9n/i3ddr8.jpg ), nadal to samo. To mi wygląda na to, że program nie ma dostępu(uprawnień) do otworzenia pliku. Tylko dlaczego?

Edit:
Dragon już patrzę

Edit 2:
Dragon, niestety przegrałbyś;p
http://screenshu.com/static/uploads/temporary/y2/lh/ov/es7v3p.jpg

plik .txt utworzony do testów, czy zadziała(zamiast .in), niestety efekt ten sam...

0

To może podaj prawdziwą zawartość pliku czworokat.in oraz prawdziwy kod którym próbujesz to wczytać.

0

czworokat.in:
[code]
(0,0),(2,0),(3,3),(0,2)
[/code]

kod wczytujący:
[code]
FILE * plik;
//Ścieżka do pliku, otwarcie pliku do odczytu
plik = fopen("czworokat.in", "r");
if(plik == NULL)
{
printf("null\n");
}
//wczytywanie kolejnych współrzednych
fscanf(plik, "(%d,%d),(%d,%d),(%d,%d),(%d,%d) ", &ax,&ay,&bx,&by,&cx,&cy,&dx,&dy);
printf("%d\n", ay);
//zamknięcie strumienia
fclose(plik);
printf("%d,%d,%d,%d,%d,%d,%d,%d\n", ax,ay,bx,by,cx,cy,dx,dy);
[/code]

EDIT:

Rozwiązałem problem! To co zrobiłem to: z poziomu użytkownika(mam prawa administratora) utworzyłem, nowy folder, nowy plik z kodem i nowy plik z danymi wejsciowymi. Po przekopiowaniu do nich danych i uruchomieniu, magia - wszystko zadziałało. Wydaje mi się, że problem mógł wynikać z tego, że pliki które wcześniej próbowałem uruchomić były skopiowane (i utworzone) poprzez program WinSCP. Pliki kopiowałem prosto z serwera hostującego(poprzez połączenie SCP).

To za co chciałby podziękować to pomoc w zlokalizowaniu problemu - nie otwierający się plik. Siedziałem nad tym do bardzo późna i nie udało mi się nic wskórać. Brawa dla was!

0

Spróbuj odpalić:
zad2poprawione.exe
przez cmd.
Bo może twoje IDE odpala to w jakimś innym "roboczym" folderze.

0

Próbowałem też tej kombinacji, niestety nie działało. Problem rozwiązałem (edit powyżej), jak trochę ochłonę to spróbuję podociekać co tak właściwie nie działało. Tymczasem uciekam. Raz jeszcze dziękuje!

1 użytkowników online, w tym zalogowanych: 0, gości: 1