我得到了一个可以使用的静态库,它接受以空格分隔的字符形式的参数。
库中的方法
int saveFile(char* param);
我正在将要保存到的文档文件路径传递给它
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
std::string str = [documentsDirectory cStringUsingEncoding:[NSString defaultCStringEncoding]];
const char * filePath = str.c_str();
char pa[1024];
pa[0] = 0;
strcat(pa, filePath);
saveFile(pa);
我的问题是IOS文件路径中有空格,这导致库在这些地方拆分路径。我尝试过用"\"转义空格,当然,在这种情况下,将路径放在引号中是不起作用的。例如下面的例子。。。
/Users/bigbadowl/Library/Application Support/iPhone Simulator/5.1/Applications/649D2EEB-8C88-42C7-9A74-21629570B1D0/Documents
将拆分为
/Users/bigbadowl/Library/Application
Support/iPhone
Simulator/5.1/Applications/649D2EEB-8C88-42C7-9A74-21629570B1D0/Documents
任何想法都将不胜感激。
感谢
一种解决方案是用一个不太可能使用的字符(如#
)替换原始字符串中的空格,执行库操作,然后将该字符的所有出现恢复为空格。大致如下:
// ...
std::replace(str .begin(), str .end(), ' ', '#'); // Replace spaces with #
const char * filePath = str.c_str();
char pa[1024] = {0};
strcat(pa, str.c_str());
std::replace(str .begin(), str .end(), '#', ' '); // Replace # with spaces
// ...
当然,如果原始字符串包含此字符,则不会得到所需的行为。你可以随时测试并选择另一个角色,所以这应该不是问题。
我认为这只是模拟器的问题。如果您无法更改saveFile,那么您可能需要查看是否可以欺骗模拟器。
作为测试,请查看是否可以在/Users/bigbadowl/
中创建一个名为iphonesim
的指向/Users/bigbadowl/Library/Application Support/iPhone Simulator
的符号链接。然后用iphonesim
替换Library/Application Support/iPhone Simulator
。
您最终会得到一个没有空格的路径/Users/bigbadowl/iphonesim/5.1/Applications/649D2EEB-8C88-42C7-9A74-21629570B1D0/Documents
。看看saveFile()
是否可以使用它。
祝你好运。