如何在R中读取用C#生成的压缩文件
在R语言中读取C#生成的Zip压缩文件方法
嘿,这事儿不难,我给你捋清楚怎么在R里读你用C#生成的这个压缩文件!先拆解下你的C#代码产物:你创建了一个名为0001.gff的Zip压缩包,里面还包含一个同名的条目,条目里是四个小端字节序的Int32数值(也就是1、2、3、4)——因为C#的BinaryWriter默认用小端字节序写数据,这一点很关键,读取时必须对应上。
下面给你两种实用的读取方案:
方法一:直接读取Zip条目内容(无需解压到本地)
这种方法更高效,不用生成临时文件,直接在内存里完成读取:
# 先安装并加载zip包(如果还没装的话) install.packages("zip") library(zip) # 定义Zip文件路径 zip_file <- "0001.gff" # 读取Zip包内的目标条目到二进制向量 entry_data <- zip::zip_read(zip_file, file = "0001.gff") # 将二进制数据解析为Int32类型,注意指定小端字节序 result <- readBin(entry_data, what = integer(), n = 4, size = 4, endian = "little") # 查看结果 print(result) # 输出应该是:[1] 1 2 3 4
方法二:先解压再读取(适合需要保留文件的场景)
如果之后还要用到解压后的文件,可以先把Zip包解压到临时目录再读取:
# 定义Zip文件路径 zip_file <- "0001.gff" # 创建临时目录存放解压后的文件 temp_folder <- tempdir() # 解压Zip包到临时目录 unzip(zip_file, exdir = temp_folder) # 拼接解压后文件的路径 target_file <- file.path(temp_folder, "0001.gff") # 以二进制只读模式打开文件并读取 con <- file(target_file, "rb") result <- readBin(con, what = integer(), n = 4, size = 4, endian = "little") close(con) # 查看结果 print(result)
重要注意事项
- 字节序必须对应:如果你的C#代码没修改
BinaryWriter的字节序,那一定要在readBin里指定endian = "little",不然会读出完全错误的数值(比如1会变成16777216)。要是后来改了C#代码用大端字节序,这里也要改成endian = "big"。 - 确保文件路径正确:如果R的工作目录和文件所在目录不一样,记得写完整的文件路径,比如
"C:/your-folder/0001.gff"。
内容的提问来源于stack exchange,提问作者vrige
相关产品推荐
相关产品推荐

