2012-01-05 37 views
7

Tôi có một thư viện C mà tôi đang sử dụng từ bên trong chương trình Mục tiêu-C của iOS. Một trong các hàm của thư viện C của tôi đọc và xử lý dữ liệu từ một tệp. Chức năng hiện tại trông giống như thế nàyTôi nên sử dụng loại nào cho chuỗi tên tệp trong dự án C cho iOS?

internalType* parseFile(const char* filename); 

Chuyển qua ký tự * cho tên tập tin như thế này an toàn trên iOS hoặc tôi tự chụp mình bằng chân unicode? Có thực hành ưa thích ở đây không?

Trả lời

3

Có thể là UTF-8. Để an toàn, bạn nên sử dụng CFURLGetFileSystemRepresentation cho URL và -[NSString fileSystemRepresentation] cho đường dẫn.

2

Có ... const char * sẽ hoạt động tốt cho những thứ C, đặc biệt khi chúng khớp với các hàm C bạn có khả năng gọi vào, chẳng hạn như fopen.

Nếu tệp của bạn có khả năng có tên tệp không phải Ascii lập dị, tất cả các cược sẽ bị tắt. :-) Bạn sẽ an toàn hơn khi thực hiện các cuộc gọi C mục tiêu, lấy các đối tượng NSURL hoặc NSString.

+0

Vì vậy, tôi có thể gọi nó như sau: 'parseFile ([tên tệp cStringUsingEncoding: NSASCIIStringEncoding]));'? – wxs

+0

Có, điều đó sẽ hoạt động. Nhưng một lần nữa, nếu bạn có các ký tự không phải mã ASCII trong tên tệp, hãy mong đợi hành vi không mong muốn (và xấu). –

+0

Đó chính xác là nỗi sợ của tôi. Tôi hy vọng rằng iOS sẽ không cho phép điều đó xảy ra (đây sẽ là một tệp trong gói ứng dụng) – wxs

Các vấn đề liên quan