我正在解析基于VisualFoxPro数据库(.dbf文件)的数据库文件,所有数据都汇编成一个文件,中间有标签告诉文件被拆分的位置。我有编写代码将文件拆分成简单文件,只是VisualFoxPro创建它的形式。但是VFP无法解析文件。
我发现当我打开一个我刚刚从VisualFoxPro创建的精美文件时,一切顺利。但是在将所有字符复制到另一个文件之后无法读取文件。我在记事本++,MS记事本中尝试了这个,MS字,结果是一样的(hex文件前后相同,但仍然可以解析)。 此外,我在记事本++中看到很多" NUL"当我将文件复制并粘贴到新文件中时,它们就消失了。可能出错?
答案 0 :(得分:1)
为什么要在记事本++,记事本,单词......中打开和编辑DBF文件?它们都是文本编辑器,但DBF文件是二进制文件(DBF文件可以包含任何ASCII字符,包括字符0x00 - 主要在其标题中)。
你仍然可以组合和分割DBF文件,但要做到这一点,你应该使用编码,并使用二进制读取&写。
您使用的是哪种语言?如果您告诉我们,我们可能会帮助您使用所用语言的代码。
这是我使用Python提出的最短的样本:
import glob, zipfile
sourceFiles = r"c:\MyData\*.*"
targetFile = r"c:\MyDataBackup\MySingleFile.zip"
with zipfile.ZipFile(targetFile, 'w') as zf:
for f in glob.glob(sourceFiles):
zf.write(f)
基本上区别在于这个是压缩的。你可以这样做:
import os, glob
sourceFiles = r"c:\MyData\*.*"
targetFile = r"c:\MyDataBackup\MySingleFile.dat"
targetFolder= r"c:\MyDataBackup"
## Writer - create single file
with open(targetFile, 'wb') as fw:
for f in glob.glob(sourceFiles):
fileName = os.path.basename(f)
fileSize = os.path.getsize(f)
fh = "{0:100}{1:10d}".format(fileName, fileSize)
# write header
fw.write( bytearray(fh,'utf-8') )
with open(f, 'rb') as fr:
fw.write(fr.read())
# reader - restore back from single file
with open(targetFile, 'rb') as fr:
fileInfo = fr.read(110)
while fileInfo:
fileName = fileInfo[:100].decode('utf-8').rstrip()
fileSize = int(fileInfo[-10:].decode('utf-8').lstrip())
outFile = targetFolder +'\\'+ fileName
with open(outFile , 'wb') as fw:
fw.write( fr.read( fileSize ) )
fileInfo = fr.read(110)