Ma to być program, który odczytuje wiele plików w katalogu i otrzymuje częstotliwość danego słowa w tych plikach, wiem, że część jest teraz niekompletna. fopen () zwraca ...

0
Rami Raghfan 15 marzec 2021, 02:49

2 odpowiedzi

Najlepsza odpowiedź

Widzę ra@ra-VirtualBox:~/Desktop/lab2/folder$ ma folder, ale READING FILE: /home/ra/Desktop/lab2/file3.txt nie. Problem polega na tym, że domyślny katalog to ~/Desktop/lab2/, i to jest to, co używa realpath(); Być może dodanie chdir() pomoże:

chdir("/home/ra/Desktop/lab2/folder");
dir = opendir("/home/ra/Desktop/lab2/folder");
1
Ken Y-N 15 marzec 2021, 00:38

Będziesz mieć lepszy pomysł na to, co się dzieje, jeśli konsekwentnie sprawdziłeś wartości zwrotu Twoich funkcji, aby rozpoznać, gdy się nie powiedzie. W takim przypadku mógłbyś zostać pociągnięty, jeśli sprawdziłeś wartość zwracania połączeń realpath().

Przypuszczam, że twój katalog domowy jest /home/ra, jak sugeruje kod. Obserwuj, że pliki, które chcesz otworzyć znajdują się w /home/ra/Desktop/lab2/folder. Pomyślnie otwierasz ten katalog i czytasz jej wpisy, a te wpisy dają nazwy podstawy plików w ramach - to znaczy nazwiska bez żadnych elementów ścieżki.

Niezależnie od tego, czy próbujesz rozwiązać te nazwy plików, otwierając pliki lub obliczając ich realpath() s, wykonujesz tak w stosunku do katalogu roboczego. Ale sposób, w jaki uruchamiasz program, jego katalog roboczy jest /home/ra/Desktop/lab2, a nie /home/ra/Desktop/lab2/folder, więc rzeczywiście pliki Program prosi o {EM> nie istnieje.

Wśród twoich opcji są

  • Uruchom program z folderu zawierającego pliki
  • Formuj poprawne ścieżki do plików, z którymi je otworzy - prawidłowe ścieżki bezwzględne lub poprawne ścieżki w stosunku do rzeczywistego katalogu roboczego.
2
John Bollinger 15 marzec 2021, 00:40