一下是我写的函数
Public Function Fcopy(Fn1 As Integer, Fn2 As Integer)
    'fn1,fn2 是打开文件的文件号    Dim dats(256) As Byte
    Do While Not EOF(Fn1)
        Get Fn1, , dats
        Put Fn2, , dats
    LoopEnd Function
当文件收尾时,存储的老是比源文件多义字写数据,不知道如何才能去处!
谢谢帮忙!

解决方案 »

  1.   

    Public Function Fcopy(Fn1 As Integer, Fn2 As Integer)
        'fn1,fn2 是打开文件的文件号
        
        Dim dats() As Byte
        redim dats(1 to lof(fn1))
        Get Fn1, , dats
        Put Fn2, , dats
    End Function
      

  2.   

    还是老战友好,第一个被你找到了Public Function Fcopy(Fn1 As Integer, Fn2 As Integer)
        'fn1,fn2 是打开文件的文件号
        
        Dim dats() As Byte
        redim dats(1 to lof(fn1))
                   ~~~~~~~~~~~~~~~我写成lof(fn1)-1,但是我生成的文件居然多了奖金一倍的容量为什么?
        Get Fn1, , dats
        Put Fn2, , dats
    End Function了
      

  3.   

    下面是我的没测试程序,没有问题啊。
    看看是不是调用时有问题,戓复制的文件是不是被别的过程中又在里面添加了什么。Private Sub Form_Load()
    Dim fNum(1) As IntegerfNum(0) = FreeFileOpen "c:\Frunlog.txt" For Binary As #fNum(0)
    fNum(1) = FreeFile
    Open "c:\a.txt" For Binary As #fNum(1)Fcopy fNum(0), fNum(1)Close fNum(0)
    Close fNum(1)
    End Sub
    Public Function Fcopy(Fn1 As Integer, Fn2 As Integer)
        'fn1,fn2 是打开文件的文件号
        
        Dim dats() As Byte
        
        ReDim dats(LOF(Fn1) - 1)
        Get Fn1, , dats
        Put Fn2, , dats
    End Function
      

  4.   

    下列规则适用于以 Random 方式打开的文件: 如果要读出的数据的长度小于 Open 语句的 Len 子句中所指定的长度,Get 会在某个边界之内读出随后的记录,在这里,边界的长度等于记录的长度。将此文件缓冲区内的现有内容填入到一个空间之内,该空间介于一个记录的结尾与下一个记录的开头之间。因为无法确定填入的数据量,所以,应设法使记录的长度与读出的数据长度一致,这通常是个好办法。
    如果读出的变量是一个可变长度字符串,则 Get 语句先读出一个含有字符串长度的双字节描述符,然后读出放入变量中的数据。所以,Open 语句中的 Len 子句所指定的记录长度必须至少比字符串的实际长度多两个字节。
    如果读出的变量是一个数值类型的 Variant,则 Get 先读出两个字节,识别 Variant 的 VarType,然后读出放入此变量中的数据。例如,在读出 VarType 3 的 Variant 时,Get 读出六个字节:前两个字节说明 Variant 为 VarType 3 (Long),后四个字节则包含 Long 类型数据。Open 语句中的 Len 子句所指定的记录长度必须至少比储存变量所需的实际长度多两个字节。 
    注意 可以使用 Get 语句从磁盘中读出一个 Variant 数组,但不能使用它读出包含数组的标量 Variant。也不能使用 Get 从磁盘中读出对象。如果读出的变量是 VarType 8 (String) 的 Variant,则 Get 先读出两个字节,识别 VarType,接下来的两个字节指出字符串的长度,然后读出字符串数据。Open 语句中的 Len 子句所指定的记录长度必须比实际字符串的长度至少多四个字节。****************************************是以下的情况吧?
    如果读出的变量是一个动态数组,则 Get 会读出一个描述符,其长度等于 2 加上 8 乘以维数,即 2 + 8 * NumberOfDimensions。读出数组数据和数组描述符就需要占据字节,而 Open 语句中的 Len 子句所指定的记录长度必须大于或等於这些字节数的总和。 例如,在将数组写入磁盘时,下列数组声明需要 118 个字节: 
    Dim MyArray(1 To 5,1 To 10) As Integer这 118 个字节的分配情况如下:18 个字节用于描述符 (2 + 8 * 2),100 个字节用于数据 (5 * 10 * 2)。
    *******************************************************************************
    如果读出的变量是一个大小固定的数组,则 Get 只读出数据。它不读出描述符。
    如果读出的变量是任何其他类型的变量(不是可变长度的字符串或 Variant£©,则 Get 只读出变量数据。Open 语句中的 Len 子句所指定的记录长度必须大于或等於要读出的数据的长度。
    Get 在读出用户定义类型的元素时,好象是单独地读出每一个元素,只是不在元素之间进行填充。在磁盘上,(用 Put 写入的)用户定义的类型的动态数组之前有一个描述符,其长度等于 2 加上 8 乘以维数,即 2 + 8 * NumberOfDimensions。Open 语句中的 Len 子句所指定的记录长度必须大于或等於读出个别元素(包括任何数组及其描述符在内)所需的全部字节数总和。 
    对于以 Binary 方式打开的文件,Random 的所有规则都适用,但以下情况除外: 当 Open 语句中的 Len 子句不起作用时,Get 连续从磁盘中读出所有变量;也就是说,两个记录之间没有任何填充。
    对于任何不属于用户定义的类型的数组,Get 只读出数据。它不会读出描述符。
    Get 读出可变长度字符串,不管这些字符串是否具有长度为 2 字节的描述符,它们都不是用户定义的类型的元素。所读出的字节数等於字符串已包含的字符数。例如,下列语句从文件号为 1 的文件中读出十个字节: 
    VarString = String(10, )
    Get #1,,VarStringPublic Function Fcopy(Fn1 As Integer, Fn2 As Integer)
        'fn1,fn2 是打开文件的文件号    Dim dats(256) As Byte
        for i=1 to lof(Fn1)
            Get Fn1, , dats
            Put Fn2, , dats
        LoopEnd Function