传递给库方法时,IOS文件路径空间被拆分



我得到了一个可以使用的静态库,它接受以空格分隔的字符形式的参数。

库中的方法

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()是否可以使用它。

祝你好运。

最新更新