关键是路径,其他文件操作和windows下一样
//这个函数得到存取的路径,读写文件获取路径比较保持一致,比如都用下面函数。
- (char*)GetFilePathByfileName:(char*)filename
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *strName = [NSString stringWithFormat:@"%s",filename];
NSString *writablePath = [documentsDirectory stringByAppendingPathComponent:strName];
int len = [writablePath length];
char *filepath = (char*)malloc(sizeof(char) * (len + 1));
[writablePath getCString:filepath maxLength:len + 1 encoding:[NSString defaultCStringEncoding]];
return filepath;
}
//保存文件
- (BOOL)SaveFile:(char*)filename data:(char*)data len:(int)len
{
char *path = [self GetFilePathByfileName:filename];
FILE *fp = fopen(path,"wb");
if (fp==NULL)
{
return false;
}
int wlen = fwrite(data, 1, len, fp);
if (wlen!=len)
{
fclose(fp);
free(path);
return false;
}
fclose(fp);
free(path);
return true;
}
//读文件
- (BOOL)ReadFile:(char*)filename data:(char*)data len:(int*)len{
char *filepath = [self GetFilePathByfileName:filename];
FILE *fp = fopen(filepath,"rb");
if (fp == NULL)
{
free(filepath);
return false;
}
fseek(fp, 0, SEEK_END);
int filelen = ftell(fp);
fseek(fp, 0, SEEK_SET);
if (*len < filelen)
{
fclose(fp);
free(filepath);
return false;
}
int rlen = fread(data, 1, filelen, fp);
if (rlen < filelen)
{
fclose(fp);
free(filepath);
return false;
}
*len = filelen;
fclose(fp);
free(filepath);
return true;
}