树莓派映像解压错误

树莓派映像解压错误


前几天买了一个tf卡,结果在装映像的时候出了问题,一直装不上系统,买了两个tf卡依旧是这样

最近发现了问题的原因
如图,文件后缀名正确但是图标是压缩包
如图,文件后缀名正确但是图标是压缩包,然后你在写入的时候需要30min。

解决方法:卸载当前压缩软件,更换新的压缩软件,例如Winrar
在这里插入图片描述
更换完压缩软件就正常了,然后写入时间也变成6min左右了,这就是正确的写入。
具体也不知道什么原因,感觉应该是原来的压缩软件把img文件当成压缩包了,然后格式就不对了,解决了就好,继续搞微机课设了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用LZMA SDK进行解压缩的C语言例程: ```c #include <stdio.h> #include <stdlib.h> #include <lzma.h> int main(int argc, char *argv[]) { if (argc < 3) { printf("Usage: %s input_file output_file\n", argv[0]); return 1; } char *input_filename = argv[1]; char *output_filename = argv[2]; // 打开输入文件 FILE *input_file = fopen(input_filename, "rb"); if (input_file == NULL) { printf("Error: Failed to open input file.\n"); return 1; } // 获取输入文件大小 fseek(input_file, 0L, SEEK_END); size_t input_file_size = ftell(input_file); rewind(input_file); // 读取LZMA头 uint8_t lzma_header[LZMA_PROPS_SIZE]; if (fread(lzma_header, 1, LZMA_PROPS_SIZE, input_file) != LZMA_PROPS_SIZE) { printf("Error: Failed to read LZMA header.\n"); fclose(input_file); return 1; } // 初始化LZMA解压缩器 lzma_stream lzma_strm = LZMA_STREAM_INIT; lzma_ret ret = lzma_stream_decoder(&lzma_strm, UINT64_MAX, LZMA_CONCATENATED); if (ret != LZMA_OK) { printf("Error: Failed to initialize LZMA decoder.\n"); fclose(input_file); return 1; } // 分配输入输出缓冲区 uint8_t *input_buf = malloc(input_file_size - LZMA_PROPS_SIZE); uint8_t *output_buf = malloc(LZMA_BUFLEN); if (input_buf == NULL || output_buf == NULL) { printf("Error: Failed to allocate memory.\n"); free(input_buf); free(output_buf); lzma_end(&lzma_strm); fclose(input_file); return 1; } // 读取输入数据 if (fread(input_buf, 1, input_file_size - LZMA_PROPS_SIZE, input_file) != input_file_size - LZMA_PROPS_SIZE) { printf("Error: Failed to read input data.\n"); free(input_buf); free(output_buf); lzma_end(&lzma_strm); fclose(input_file); return 1; } // 设置LZMA输入缓冲区 lzma_strm.next_in = input_buf; lzma_strm.avail_in = input_file_size - LZMA_PROPS_SIZE; // 设置LZMA输出缓冲区 lzma_strm.next_out = output_buf; lzma_strm.avail_out = LZMA_BUFLEN; // 解压缩数据 while (1) { ret = lzma_code(&lzma_strm, LZMA_RUN); if (ret != LZMA_OK && ret != LZMA_STREAM_END) { printf("Error: Failed to decode LZMA data.\n"); free(input_buf); free(output_buf); lzma_end(&lzma_strm); fclose(input_file); return 1; } fwrite(output_buf, 1, lzma_strm.next_out - output_buf, output_file); lzma_strm.next_out = output_buf; lzma_strm.avail_out = LZMA_BUFLEN; if (ret == LZMA_STREAM_END) { break; } } // 释放资源 free(input_buf); free(output_buf); lzma_end(&lzma_strm); fclose(input_file); printf("Done.\n"); return 0; } ``` 这个例程通过LZMA SDK提供的API实现了LZMA解压缩功能。关键的部分是`lzma_stream`结构体和`lzma_code`函数。`lzma_stream`结构体用于存储LZMA解压缩器的状态,而`lzma_code`函数则用于实际解压缩数据。在解压缩过程中,我们需要设置输入缓冲区和输出缓冲区,然后调用`lzma_code`函数不断解压数据,直到所有数据都被解压缩完毕。在解压缩完成后,我们需要调用`lzma_end`函数释放资源。 注意:这个例程仅适用于对单个LZMA数据块进行解压缩。如果需要解压缩多个LZMA数据块,需要使用`LZMA_CONCATENATED`选项来初始化LZMA解压缩器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值