일부 멀티 플랫폼 C++ 코드에서 작업 중입니다. 따라서 fopen, fgetpos 등을 사용하기위한 요구 사항은 다음과 같습니다. iOS의 초기 버전이었고 최신 버전으로의 업데이트가 중단되었습니다.번들의 파일을 열 때 iOS 6.1 시뮬레이터에서 fgetpos가 실패합니다.
Shader 폴더에 Shader.vsh 및 Shader.fsh라는 텍스트 파일을 두어 번들에 복사했습니다. 파일을 열려면 다음을 수행하십시오.
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFStringRef cfstrFilename = CFSTRFromConstCharPtr("Shader");
CFStringRef cfstrFileType = CFSTRFromConstCharPtr("vsh");
CFStringRef cfstrSubDir = CFSTRFromConstCharPtr("Shaders");
CFURLRef resourcesURL = CFBundleCopyResourceURL(mainBundle, cfstrFilename, cfstrFileType, cfstrSubDir);
CFStringRef str = CFURLCopyFileSystemPath(resourcesURL, kCFURLPOSIXPathStyle);
CFRelease(resourcesURL);
char path[ PATH_MAX ];
CFStringGetCString(str, path, FILENAME_MAX, kCFStringEncodingASCII);
CFRelease(str);
FILE* fp = fopen(path, "rb");
이 시점에서 fp는 NULL이 아닙니다. 그래서 나는 그것이 성공했다고 가정합니다. 나중에 시도 할 때
fpos_t pos;
int result = fgetpos(fp, &fpos_t);
결과가 -1이고 errno = 0x2인데, 이는 파일을 찾을 수 없다고 생각합니다.
이전에 언급했듯이,이 기능은 이전 버전을 사용하기도했습니다. 이 작업을 다시 시작하고 최신 XCode 등으로 업데이트 된 프로세스에서 작업이 중단되었습니다.
fopen에 전달하는 파일의 경로는/Users/shammi/Library/Application Support/iPhone Simulator/6.1/Applications/9132490F-71AC-4C61-A584-E8F6C5B261FF/TestApp.app/Shaders /Shader.vsh 파인더/콘솔에서 해당 파일을보고 열 수 있으며 유효한 지 확인했습니다.
내가 뭘 잘못하고 있니? 휴대용 IO 기능을 사용할 수있는 또 다른 방법이 있습니까?
파일 접근 권한으로 인해 문제가 발생할 수 있습니다. 누구든지 XCode 또는 시뮬레이터 권한에 대한 특정 요구 사항이 있는지 알고 있습니까? – Shammi