iOS 数组用c代码写文件与查看沙盒文件

背景:

最近遇到个问题,在获取航拍实时数据做图像处理的时候,有时候处理结果不正确(图像中有目标物,没有识别出来)。就需要在画面上添加一个按钮,点击来保存当时的画面到沙盒中。

但是,写入的数据,需要放到Matlab下生成图片。所以,使用OC自带的writeToFile不方便实用。(将Array writeToFile 到 txt后,里面的格式是XML。。。)


1、首先获取当前时间,用作文件名来区分保存的文件。

```

NSString*timeStr = [NSStringstringWithFormat:@"%@",[NSDatedate]];

```

2、获取文件路径

```

// 获取沙盒documents路径

NSMutableString *documentsPath = [NSMutableString stringWithString:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]];

// 拼接成对应的文件路径名

[documentsPath appendFormat:@"/rData_%@.txt",timeStr];

```

3、NSString转成C的指针string

const char *filePath = [documentsPath UTF8String];


4、打开文件(若不存在则创建文件)

//        "w" 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

//        "w+" 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

//        "a" 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

//        "a+" 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

FILE *fp = fopen(filePath, "w+");


5、写入

// _RArray数据是 NSNumber numberWithInt: 写入,对应用intValue取出来

int a =[_RArray[j][k] intValue];

fprintf(fp, "%d\t", a);


6、关闭文件

fclose(fp);


由于有RGB三个通道,循环三次依次写入三个文件。完整代码如下

NSString *timeStr = [NSString stringWithFormat:@"%@",[NSDate date]];

for (NSInteger i = 1; i <= 3; i++)

{

// 获取路径

NSMutableString *documentsPath = [NSMutableString stringWithString:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]];

switch (i) {

case 1:

[documentsPath appendFormat:@"/rData_%@.txt",timeStr];

break;

case 2:

[documentsPath appendFormat:@"/gData_%@.txt",timeStr];

break;

case 3:

[documentsPath appendFormat:@"/bData_%@.txt",timeStr];

break;

default:

break;

}

const char *filePath = [documentsPath UTF8String];

NSLog(@"documentsPath : %@",documentsPath);

FILE *fp = fopen(filePath, "w+");

switch (i)

{

case 1:

for (NSInteger j = 0; j < _RArray.count; j++) {

for (NSInteger k = 0; k < [_RArray[0] count]; k++) {

int a =[_RArray[j][k] intValue];

//                            printf("%d\t",a);

fprintf(fp, "%d\t", a);

}

fprintf(fp, "\n");

}

break;

case 2:

for (NSInteger j = 0; j < _GArray.count; j++) {

for (NSInteger k = 0; k < [_GArray[0] count]; k++) {

int a =[_GArray[j][k] intValue];

fprintf(fp, "%d\t", a);}

fprintf(fp, "\n");

}

break;

case 3:

for (NSInteger j = 0; j < _BArray.count; j++) {

for (NSInteger k = 0; k < [_BArray[0] count]; k++) {

int a =[_BArray[j][k] intValue];

fprintf(fp, "%d\t", a);}

fprintf(fp, "\n");

}

break;

default:

break;

}

fclose(fp);



查看写入到沙盒的文件



打开Xcode,将手机与Mac通过数据线连接
iOS 数组用c代码写文件与查看沙盒文件_第1张图片
点击Window -> Devices 或者 cmd + Shift + 2



iOS 数组用c代码写文件与查看沙盒文件_第2张图片
在弹出的页面,选择你的手机,应用


iOS 数组用c代码写文件与查看沙盒文件_第3张图片
下拉进度条,点击设置按钮


选择Download Container...


iOS 数组用c代码写文件与查看沙盒文件_第4张图片
保存


iOS 数组用c代码写文件与查看沙盒文件_第5张图片
显示包内容


iOS 数组用c代码写文件与查看沙盒文件_第6张图片
找到写入的文件

你可能感兴趣的:(iOS 数组用c代码写文件与查看沙盒文件)