复制到其他文件时文件内容会发生更改

时间:2015-09-30 12:33:03

标签: file visual-foxpro

我正在解析基于VisualFoxPro数据库(.dbf文件)的数据库文件,所有数据都汇编成一个文件,中间有标签告诉文件被拆分的位置。我有编写代码将文件拆分成简单文件,只是VisualFoxPro创建它的形式。但是VFP无法解析文件。

我发现当我打开一个我刚刚从VisualFoxPro创建的精美文件时,一切顺利。但是在将所有字符复制到另一个文件之后无法读取文件。我在记事本++,MS记事本中尝试了这个,MS字,结果是一样的(hex文件前后相同,但仍然可以解析)。 此外,我在记事本++中看到很多" NUL"当我将文件复制并粘贴到新文件中时,它们就消失了。可能出错?

1 个答案:

答案 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)