做文件写入工作的时候,如果是覆盖同路径同名的文本格式的文件的时候,这个同路径同名的文本文件内容将被全部替换成新的文件内容,这是我希望看到的情况。然而,当覆盖同路径同名的二进制文件确不会这样,就是说我的第二个二进制文件如果比第一个短的话,只是重写了同名文件的前面部分,第二个文件没有出现的后部分也同时存在在这个文件中。
  翻阅了论坛以前的帖子:发现利用kill函数先删除原先的文件,然后重建文件,确实可以解决问题。但是这个方法只是用于下面代码的情况:
Kill "d:\a.abc"
Open "d:\a.abc" For Binary As #1
Put #1, , chunkMsg()
Close #1
  但是我的程序要求我用commondialog控件来实现文件的保存,于是我写了以下代码,但是确出现了问题:就是不管是新建的文件名字还是覆盖原先已经存在的文件,都不能生成文件了。
CommonDialog1.Filter = "MIDI文件 (*.mid)|*.mid"
CommonDialog1.ShowSave
midiFilePath = CommonDialog1.FileName   '将文件路径赋值给暂存变量
Kill midiFilePath                       '去掉这句话,保存不同名文件可以,但是覆盖出现问题
Open midiFilePath For Binary As #1
Put #1, , chunkMsg()
Close #1请教大家,为什么出现这样的问题,拜托各位高手了!

解决方案 »

  1.   

    open for output就可以覆盖了
      

  2.   

    setattr midiFilePath,vbnormal
    Kill midiFilePath试下
      

  3.   

    用kill之前先判断这个文件是否存在
    已经存在就删
      

  4.   

    if dir(midiFilePath)<>"" then msgbox "文件存在!"
    Dir 函数示例
    本示例使用 Dir 函数来检查某些文件或目录是否存在。在 Macintosh 计算机上,默认驱动器名称是 “HD” ,并且路径部分由冒号取代反斜线隔开。而且 Microsoft Windows 的通配符在 Mac 中可以作为有效字符出现在文件名中。也可以使用 MacID 函数来指定文件组。Dim MyFile, MyPath, MyName' 返回“WIN.INI” (如果该文件存在)。
    MyFile = Dir("C:\WINDOWS\WIN.ini")   ' 返回带指定扩展名的文件名。如果超过一个 *.ini 文件存在,
    ' 函数将返回按条件第一个找到的文件名。
    MyFile = Dir("C:\WINDOWS\*.ini")' 若第二次调用 Dir 函数,但不带任何参数,则函数将返回同一目录下的下一个 *.ini 文件。
    MyFile = Dir' 返回找到的第一个隐式 *.TXT 文件。
    MyFile = Dir("*.TXT", vbHidden)' 显示 C:\ 目录下的名称。
    MyPath = "c:\"   ' 指定路径。
    MyName = Dir(MyPath, vbDirectory)   ' 找寻第一项。
    Do While MyName <> ""   ' 开始循环。
       ' 跳过当前的目录及上层目录。
       If MyName <> "." And MyName <> ".." Then
          ' 使用位比较来确定 MyName 代表一目录。
          If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
             Debug.Print MyName   ' 如果它是一个目录,将其名称显示出来。
          End If
       End If
       MyName = Dir   ' 查找下一个目录。
    Loop