dim myarr as string*1
dim i as long
open "d:\1.jpg" for binary as #1
  open "d:\2.jpg" for binary as #2
     for i=1 to lof(1)
      get#1,1,myarr
      put#2,1,myarr
     next
close#1,#2
以上代码能把1.jpg复制成2.jpg,1,2的字节数大小都是一致的。但是为什么⒉jpg无法显示用以上方法复制文本是可以正常显示的
请来的同志不要给我介绍文件复制的方法,我会,我用byte数组的方式复制文件都可以正常使用。。
我的问题是上面的复制,为什么导致复制出来的文件(如:jpg,mp3,exe等)失效

解决方案 »

  1.   

    哦我知道了
    dim myarr as string*1
    dim i as long
    open "d:\1.jpg" for binary as #1
      open "d:\2.jpg" for binary as #2
         for i=1 to lof(1)
          get#1,1,myarr'这2句写错了,不应该是get#1,1,myarr,应该是get#1,i,myarr
          put#2,1,myarr'put#2,i,myarr
         next
    close#1,#2
    回答完毕
      

  2.   


        Dim myarr() As Byte    Open "d:\1.jpg" For Binary As #1
            ReDim myarr(LOF(1) - 1)    Open "d:\2.jpg" For Binary As #2        Get #1, , myarr
            Put #2, , myarr    Close #1, #2
      

  3.   

    疯了~
    N个字节不一样
    大概是String类型的自动转换
    我刚才试验了一下
    把myarr的类型改成Byte就可以了
    Dim myarr As Byte酱紫
    这次没问题了
    结帖吧
      

  4.   

    我也知道用byte可以,我就是郁闷,,,为什么大小一样,文件就是不一样呢
      

  5.   

    用 WINHEX 打开对比 2 个文件看看,不要用记事本打开
      

  6.   

    图片文件是以二进制数据保存的,所以必须定义为:
    Dim myarr as Byte
    因为ASCII码在0-127能用记事本阅读,而128-255值的ASCII码无法在记事本阅读,回写文件时出错,以至造成与原文件不一致。
      

  7.   

    楼上的兄弟说得有点道理
    但是我复制txt文件的时候,所有字符都能阅读
      

  8.   

    用以下演示代码,你可看到Text1中有许多"?"字符,Text3中有许多"3F"16进制数
    Option Explicit
    Dim i As Integer
    Dim j As Integer
    Dim str As String
    Dim str2 As String
    Dim HData As String
    Private Sub Command1_Click()
        For i = 0 To 255
            Text1 = Text1 & ChrW(i)
        Next
        str = Text1.Text
        Text2 = Len(str)
        For j = 1 To 255
            str2 = Mid(str, j, 1)
            Text4 = str2
            If Len(Hex(Asc(str2))) = 1 Then
                HData = HData & "0" & Hex(Asc(str2)) & " "
            Else
                HData = HData & Hex(Asc(str2)) & " "
            End If
        Next
        Text3 = HData
    End SubPrivate Sub Form_Load()
        Text1 = ""
        Text3 = ""
    End Sub
      

  9.   

    先谢过。
    到底string*1和byte有何不同。也就是说,复制之后文件大小不变,而部分数据改变,
    是什么原因导致了这部分数据的改变?为什么偏偏就只是一部分数据改变,而不是全部??
      

  10.   

    Byte 数据类型和String 数据类型是不同的数据类型:
    Byte 数据类型
    Byte 变量存储为单精度型、无符号整型、8 位(1个字节)的数值形式,范围在 0 至 255 之间。String 数据类型
    String 之字符码的范围是 0 到 255。字符集的前 128 个字符(0 到 127)对应于标准的 U.S. 键盘上的字符与符号。这前 128 个字符与 ASCII 字符集中所定义的相同。后 128 个字符(128 到 255)则代表特殊字符,例如国际字符,重音符号,货币符号及分数。String 的类型声明字符为美元号 ($)。此外你用记事本或写字板打开图形文件会看到空白或乱码,打开文本文件看到的是字符或汉字。
      

  11.   

    我慢慢明白了一点,,,byte转成string*1会造成byte精度的丢失,这个就可能是为什么文件会部分损坏的原因了
    顿悟。。
    谢谢各位兄弟。