目标C读完整文件到字符串

时间:2017-12-17 03:26:21

标签: ios objective-c swift

我正在尝试为iOS创建一个文件管理器(我的代码内置了一个漏洞,因此它可以工作)。

我的应用程序的主要代码是用Swift编写的,运行漏洞利用和读取文件的代码是用Objecive-C编写的。

这是我目前在Objective-C中使用的代码:

NSString* readFile(NSString* file) {
    char* buffer;
    long lSize;
    char* convertedFileName = [file UTF8String];
    char* newFileName = deleteLastChar(convertedFileName); >> removes last / from path
    char ch;
    FILE *fp=fopen(newFileName, "r");
    fseek( fp , 0L , SEEK_END);
    lSize = ftell( fp );
    rewind( fp );

    buffer = calloc( 1, lSize+1 );
    if( !buffer ) fclose(fp),fputs("memory alloc fails",stderr),exit(1);

    if( 1!=fread( buffer , lSize, 1 , fp) )
        fclose(fp),free(buffer),fputs("entire read fails",stderr),exit(1);

    printf(buffer);

    fclose(fp);
    return [[NSString alloc] initWithUTF8String:buffer];
}

这是Swift的代码:

func openFile(file: String) {
    let fileContents = readFile(file)

    print(fileContents) >> outputs nil
}

这是我尝试打开的文件(plist文件)的示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>canvas_height</key>
<integer>1136</integer>
<key>canvas_width</key>
<integer>640</integer>
</dict>
</plist>

这就是Objective-C代码中的printf返回的内容:

bplist00\322]canvas_height\canvas_width\240\332
(+

Swift说字符串是nil

正在读取文件,但仍有问题。关于如何解决这个或更好的方法处理这个的任何想法?

0 个答案:

没有答案