Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在尝试确定此数据库字段是否已压缩数据_C#_Database_Zip_Compression - Fatal编程技术网

C# 正在尝试确定此数据库字段是否已压缩数据

C# 正在尝试确定此数据库字段是否已压缩数据,c#,database,zip,compression,C#,Database,Zip,Compression,我不确定这个董事会是否适合提出这样的问题,但我真的找不到更好的地方了,所以让我提前为此道歉 我试图读取第三方数据库以实现互操作性,但我很难使用一个特定的表。此表有两列:blobSize和blob。Blob大小是一个整数,Blob是一个字节数组 我猜这个字段是基于两个假设压缩的: 1) blobsize与blob字段的实际大小不对应,例如,我将在文章末尾发布的blob有294个字节,而blobsize通知大小为2560 2) blob以0x50 0x4B 0x01 0x02(pk12)开始,这与z

我不确定这个董事会是否适合提出这样的问题,但我真的找不到更好的地方了,所以让我提前为此道歉

我试图读取第三方数据库以实现互操作性,但我很难使用一个特定的表。此表有两列:blobSize和blob。Blob大小是一个整数,Blob是一个字节数组

我猜这个字段是基于两个假设压缩的:

1) blobsize与blob字段的实际大小不对应,例如,我将在文章末尾发布的blob有294个字节,而blobsize通知大小为2560

2) blob以0x50 0x4B 0x01 0x02(pk12)开始,这与zip文件()的中心目录头非常相似。但是zip文件的压缩数据位于文件的开头,中心目录位于文件的末尾。blob从类似于zip格式的central directoy开始,然后有大量数据,这是相反的

我尝试使用SevenZipSharp和XCeed Zip库解压缩数据,但没有成功。由于此数据是在应用程序中生成的(而不是压缩文件),因此blob中不会有任何关于文件名、大小、修改日期等的信息,这些库希望数据来自文件

我还尝试在字节中查找central directoy的每个元素,它们似乎遵循zip文件格式中指定的内容。中央目录部分中存在的一个特殊信息是压缩方法,该方法在这些数据库字段中为“0x09 0x00”,应该是增强的deflate(deflate64)

也许我不知道如何用这些库解压缩这些数据,也许它们甚至不是一个压缩字段。也许有人对压缩数据或zip文件更有经验,可以指导我找到正确的路径

此数据应包含某些数据库元素的几何信息。我也不认为它是一个加密字段,因为数据库中的所有其他数据都是二进制格式的,但都是打开的,我设法读取了它们。这是唯一让我头疼的领域

例如,此处显示一行的内容:

  • 水滴大小:2560

  • 水滴:

-

但是zip文件的压缩数据位于文件的开头,中心目录位于文件的末尾

没错,但是从链接的页面上看,每个zip文件头都以字母“PK”或0x50 0x4B开头。这表明它至少看起来像一个zip文件,您可以尝试这样读取它


有关示例,请参见

“我试图读取第三方数据库以实现互操作性”——他们是否发布了API?此外,还有许多压缩技术,它可能不是zip。@mickyduncan不幸的是,没有API。我研究了很多压缩技术,每一种都有这样的头,但唯一一种以PKxx开头的是PKZIP格式“表明它是PKZIP文件”——你确定吗@Micky我想你是对的,
PK 0x01 0x02
是一个“中央目录”头,
PK 0x03 0x04
是一个“本地文件”头。至少尝试以zip文件的形式打开数据也无妨。
string hexa = "504B01021500150004000900C0480E470000C048FFFFFFFF000000000000000000000000FFFF0000000000000000BB705EF0C1C28D520F19D0801D0333C3BFFF9C0C6C48E28C4036088381000303139001E2FFFBFFFF3F44908101C81C550D007F81B1058A3F181E550D883C2A445610433E1096302830B832E401E922864A5856268A16636085E77978D9804367C164959D9DD72E303283E4A18A5D80F6BA31C433043384300401D98E0CBE3874631716636062440E06ECAA30456F610A912D428EFD645B86452325F683A201548E83E20454068CB6070037D552A6591CB3F7E3A0EDA1E2705A80C119585EE4321400C962864C608991CAE00EC4203103206460C06112CC06B849309365817AF0800FF6782491A43ED82FE3021B09564FA82842D238B29900";

byte[] bytes = Enumerable.Range(0, hexa.Length)
                 .Where(x => x % 2 == 0)
                 .Select(x => Convert.ToByte(hexa.Substring(x, 2), 16))
                 .ToArray();