作用:将接收到的数据生成jpg文件
参数:Tfile——欲生成的文件
      ByteData()接收数据的变量,类型为Byte
语句如下:
 
   Tfile = “i:\jpg\中国地图\广东省\16230881fcb96d3de500b2c6c70002d3cd353a3efbea32.jpg”
    Fnum = FreeFile()
    '向二进制文件中加入下载文件的数据
    Open Tfile For Binary Lock Write As #Fnum      ....
    Put #Fnum, , ByteData()open行出现错误提示:
    文件不存在!根据open函数的定义,如果文件不在则生成文件,不知道为何会有如此提示?试过将Tfile改为:Tfile = StrConv(Tfile , vbUnicode)
运行通过,但没能看见保存的文件有没哪位高人指点一二,谢谢!

解决方案 »

  1.   

    '试一试下列代码
    ' 字节数组长度和你要写的数据长度要一致
    open Tfile for binary access write as #fnum   
         Put #Fnum,,ByteData()  
         close #fnum        
         
      

  2.   

    引号是贴出来显示不正常。改成access试过不行关于access这个参数,之所以用lock是不允其它的线程或是程序对它进行写操作,所以说问题应该不出在这。
      

  3.   

    Tfile="i:\jpg\16230881fcb96d3de500b2c6c70002d3cd353a3efbea32.jpg",用这个试一下看行不行?
      

  4.   

    哦,上面错了。
    应该是打开文件错误,先确认一下JPG文件有没有大小,双击有没有图像显示。如果有图像,那应该诃以用OPEN打开二进制文件。
      

  5.   

    多试一下,如果不行再改一个短文件名:Tfile="i:\jpg\1.jpg"
      

  6.   

    '本程序演示将JPG文件显示在picture1中,并将picture1保存到一维数组中,再将一维数组还原成图像到picture2中
    '在Form1上添加2个图片框picture1、picture2,1个命令按钮command1
    '事先在picture1中装入一张JPG图片,picture2.width=picture1.width,然后picture2.height=picture1.height
    Option ExplicitPrivate Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
    Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
    Private Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As LongPrivate Type BITMAP
             bmType   As Long
             bmWidth   As Long
             bmHeight   As Long
             bmWidthBytes   As Long
             bmPlanes   As Integer
             bmBitsPixel   As Integer
             bmBits   As Long
    End Type
    Dim PictureBits() As Byte, PictureInfo As BITMAP, iBit As LongPrivate Sub Command1_Click()
            GetObject Picture1.Image, Len(PictureInfo), PictureInfo
            ReDim PictureBits(1 To PictureInfo.bmWidthBytes * PictureInfo.bmHeight) As Byte
            GetBitmapBits Picture1.Image, UBound(PictureBits), PictureBits(1)
            For iBit = 1 To UBound(PictureBits)
                PictureBits(iBit) = 255 - PictureBits(iBit) '复制位图到一维数组
            Next iBit
            SetBitmapBits Picture2.Image, UBound(PictureBits), PictureBits(1) '将数组还原成图像
            Picture2.Refresh
    End SubPrivate Sub Form_Load()
            Picture1.Picture = LoadPicture("d:\131431.jpg")
            Picture2.Width = Picture1.Width
            Picture2.Height = Picture1.Height
    End Sub
      

  7.   

    Option ExplicitPrivate Sub Command1_Click()
    Dim bytedata(0 To 100) As Byte
    Dim fnum As Integer
    Dim Tfile As String
    Tfile = "d:\jpg\中国地图\广东省\16230881fcb96d3de500b2c6c70002d3cd353a3efbea32.jpg"
    'Open Tfile For Binary As #1
    'Close #1
            fnum = FreeFile()
            '向二进制文件中加入下载文件的数据
            Open Tfile For Binary Lock Write As #fnum
            Put #fnum, , bytedata()
            Close fnumEnd Sub我在d:\建了jpg\中国地图\广东省就可以了。
      

  8.   

    按楼上说的,我搞了个这个Tfile = "D:\jpg\中华人民共和国地图\广东省\16230881fcb96d3de500b2c6c70002d3cd353a3efbea32.jpg",没问题。
      

  9.   

    怎么会这样?!D:盘就可以,I:盘就不行!我用的是VB6+SP6,难道有限制?如果是服务器上多几个盘就不行的话,那就麻烦了。不知道.net会不会有这样的情况?我的机上没装,哪位兄弟能帮忙试试
      

  10.   

    有新的发现:  程序执行一次后关闭,重新打开程序如果还是同一个夹下就出现上面提到的错误,如果换另一个文件夹就没问题。问题分析:
      在open前有使用过API函数SHCreateDirectoryEx创建文件夹,不知道是不是这个的原因?SHCreateDirectoryEx函数声明:Private Declare Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" (ByVal hwnd As Long, ByVal pszPath As String, ByVal psa As Any) As Long另请教:   如果是想创建一个二级或二级以上的文件夹,除了这个函数还有没有其它更好的办法?
      

  11.   

    补充:    并不存在重复调用SHCreateDirectoryEx函数的问题。与open所在的过程是两个相互独立的。即:    在第一次运行程序,用SHCreateDirectoryEx建立文件夹,然后调用open所在过程新建文件,无论多少个文件都可以新建成功。但是,如果将程序关闭后重新打开,调用open所在过程新建文件,就出现“文件找不到”的错误,当然文件夹路径信息是已经用其它的文件保存了的,open所需的文件路径就是从中提取的。
      

  12.   

      To:infuse
        权限都有的。继续跟进:
      
      已通过手工用mkDir逐级新建文件夹,问题依然存在,排除SHCreateDirectoryEx函数出问题的可能。