2009-06-15 3 views
17

Próbuję wczytać plik do łańcucha. Oto kod, którego używam:Ciąg znaków NSStringWithContentsOfFile zawiedzie, co wydaje się być błędnym kodem błędu

NSError *error = nil; 
NSString *fullPath = [[NSBundle mainBundle] pathForResource:filename 
                ofType:@"html"]; 
NSString *text = [NSString stringWithContentsOfFile:fullPath 
              encoding:NSUTF8StringEncoding 
               error:&error]; 

Po podaniu @ "o" jako nazwie pliku, działa całkowicie poprawnie, pokazując, że kod działa. Po przekazaniu w @ "eula" jako nazwy pliku, kończy się niepowodzeniem z "Błąd kakao 258", który tłumaczy się na NSFileReadInvalidFileNameError. Jeśli jednak wymienię zawartość plików, ale zachowam nazwy identyczne, drugi plik nie udowodni, że nie ma nic złego w nazwie pliku, ma to coś wspólnego z zawartością.

O pliku jest dość prosty HTML, ale plik eula to ogromny bałagan wyeksportowany z Word przez dział prawny.

Czy ktoś wie o wszystkim w pliku HTML, który może spowodować podniesienie tego błędu?

Much Dzięki,

Sam

Odpowiedz

8

Błąd jest prawie na pewno, że twój plik nie jest w UTF-8, ale masz rację, to brzmi jak błąd w raporcie o błędzie.

Otwórz plik eula za pomocą BBEdit (lub darmowego TextWranglera) i zobacz, jakie kodowanie używa. Zmień kodowanie na UTF-8 i zapisz go. Zróżnicuj dwa pliki, aby zobaczyć, jakie różnice wystąpiły. Zastąp oryginalny plik nowym (usuwając wszelkie usterki).

Jeśli to rozwiąże problem, użyj Apple Bug Reporter, aby zgłosić błąd w raporcie o błędzie.

3

Najbardziej prawdopodobnym powodem, że +stringWithContentsOfFile:encoding:error: zawiedzie w tym przypadku byłoby jeśli podałeś niewłaściwy kodowanie. Czy jesteś pewien, że Twój plik @"eula" jest zakodowany w UTF8?

Jeśli nie masz pewności co do kodowania pliku, zawsze możesz spróbować użyć numeru +stringWithContentsOfFile:usedEncoding:error: i sprawdzić, czy działa i jakie kodowanie przychodzi.

10

Właśnie spędziłem 45 minut z tym problemem, tylko w moim przypadku rozwiązanie było głupie i problem nieco inny.

  • W moim katalogu zasobów znajdował się plik o nazwie Playlist.txt. Ładowanie było w porządku.
  • Plik został zmodyfikowany w jednym punkcie, z poziomu kodu XCode.
  • Plik zatrzymał się poprawnie, z tym samym błędem co powyżej. Jednak nigdy nie został przeniesiony ani nie zmieniono jego rodzaju kodowania.
  • Zrobiłem polecenie-I (Pobierz informacje) na temat pliku w katalogu XCode, który powiedział mi, że to UTF-8 (zgodnie z oczekiwaniami).
  • Próbowałem sposobu "usedEncoding" odczytu plików, bez kości. Ten sam błąd, kodowanie zwróciło wartość NULL.
  • W końcu usunąłem plik z XCode, ponownie go wciągnąłem i zrobiłem Clean All. To naprawiło problem.

To nie jest po raz pierwszy, że XCode magicznie buforowanie rzeczy (nieprawidłowo) spowodowało mi godzinami straconego czasu.Jeśli masz taki błąd, który nie ma sensu, spróbuj usunąć i zastąpić pliki oraz wyczyścić wszystkie cele.

0

Nie wiem, czy to jest twój problem, ale po prostu miałem coś podobnego (stringWithContentsOfFile, no JSON), a problem polegał na tym, że plik zawierał zakończenia linii CRLF (Windows) i Western-what-it's- nazywane kodowaniem. Użyłem SubEthaEdit do konwersji na LF i UTF-8, i wszystko działa dobrze.

+0

Szczerze mówiąc, po prostu otworzyłem go, trochę się z nim bawiłem, zmieniłem kodowanie i zapisałem ponownie - była to albo niepoprawna litera gdzieś w pliku, albo coś podobnego do znalezionego - koniec linii/problem z kodowaniem. To był bardzo mylący komunikat o błędzie, który rzucił mnie! – deanWombourne

4

Miałem taki sam błąd, użyj nazwy pliku z [[NSBundle mainBundle] pathForResource: @ "pageList" ofType: @ "txt"]] powodzenia!

0

Wystąpił ten sam błąd.

Kiedy grałem trochę, okazało się, że nie dołączałem pliku do zasobów pakietu kopii celu.

Zrobiłem to i zadziałało dobrze.

Ale, muszę powiedzieć - błąd jest dość mylący dla tak prostej przyczyny. Po prostu zgaduję z Xcode'a

Powiązane problemy