0

我已经获得了一个静态库来使用它接受参数作为空格分隔的字符。

库中的方法

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

任何想法,将不胜感激。

谢谢

4

2 回答 2

0

一种解决方案是将原始字符串中的空格替换为不太可能使用的字符(例如#),执行库操作,然后将该字符的所有出现恢复为空格。类似于以下内容:

// ...
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
// ...

当然,如果原始字符串包含此字符,您将不会获得所需的行为。你总是可以测试这个并选择另一个字符,所以这应该不是问题。

于 2012-07-13T22:36:41.623 回答
0

我认为这只会是模拟器的问题。如果您无法更改 saveFile,那么您可能需要查看是否可以欺骗模拟器。

作为测试,看看你是否可以/Users/bigbadowl/Library/Application Support/iPhone Simulator/Users/bigbadowl/named中创建一个符号链接iphonesim。然后替换Library/Application Support/iPhone Simulatoriphonesim.

你最终会/Users/bigbadowl/iphonesim/5.1/Applications/649D2EEB-8C88-42C7-9A74-21629570B1D0/Documents得到没有空格的路径。看看是否saveFile()可以使用它。

祝你好运。

于 2012-07-13T22:51:35.907 回答