Vb6 文件准备打开错误55。无法将一个文件作为二进制文件打开并写入文本文件

Vb6 文件准备打开错误55。无法将一个文件作为二进制文件打开并写入文本文件,vb6,Vb6,我有一个VB6项目已经运行良好。但我只想读取一个同步文件并读入一个文本文件,而无法读取文件并写入文本文件。如果我对写入过程和只读syncfile进行注释,则其工作正常 Sub ReadSyncFile(){ Dim iFile As Long iFile = FreeFile iFile2 = FreeFile Open App.Path & "\sirt.txt" For Output As iFile2 Open SyncFile For Binary Access Read As

我有一个VB6项目已经运行良好。但我只想读取一个同步文件并读入一个文本文件,而无法读取文件并写入文本文件。如果我对写入过程和只读syncfile进行注释,则其工作正常

Sub ReadSyncFile(){
Dim iFile As Long
iFile = FreeFile
iFile2 = FreeFile
Open App.Path & "\sirt.txt" For Output As iFile2
Open SyncFile For Binary Access Read As iFile

Get iFile, , SyncHdr
wb.Visible = False

For icnt = 1 To MAX_PAGES
PBar = icnt
DoEvents
    If SyncHdr(icnt).OffsetStart > 1 Then
       Seek iFile, SyncHdr(icnt).OffsetStart
       Get iFile, , SyncPgs(icnt).pgHdr

       ReDim arWords(SyncPgs(icnt).pgHdr.nWords)
       Get iFile, , arWords

       For i = 0 To UBound(arWords)
           Print #iFile2, i, arWords(i).WrdNum; arWords(i).WrdText; arWords(i).WrdAudLen; arWords(i).WrdIsSync
       Next
       Close iFile2

       ReDim SyncPgs(icnt).arWrd(SyncPgs(icnt).pgHdr.nWords)
       SyncPgs(icnt).arWrd = arWords
    End If
    Next
    Close iFile
    Erase SyncHdr
    wb.Visible = True
    syncOpened = True
 End Sub

}

因为在打开任何文件之前调用FreeFile函数,所以您会得到相同的号码,可能返回1,并同时分配给iFile和iFile2。这就是你错误的根源。您正试图打开两个文件的文件号相同

在再次调用FreeFile之前,只需稍微更改代码,将iFile设置为FreeFile,即打开文件

Sub ReadSyncFile(){
Dim iFile As Long

iFile = FreeFile
Open SyncFile For Binary Access Read As iFile
iFile2 = FreeFile
Open App.Path & "\sirt.txt" For Output As iFile2

Get iFile, , SyncHdr
wb.Visible = False

For icnt = 1 To MAX_PAGES
    PBar = icnt
    DoEvents
    If SyncHdr(icnt).OffsetStart > 1 Then
        Seek iFile, SyncHdr(icnt).OffsetStart
        Get iFile, , SyncPgs(icnt).pgHdr

        ReDim arWords(SyncPgs(icnt).pgHdr.nWords)
        Get iFile, , arWords

        For i = 0 To UBound(arWords)
            Print #iFile2, i, arWords(i).WrdNum; arWords(i).WrdText; arWords(i).WrdAudLen; arWords(i).WrdIsSync
        Next
        Close iFile2

        ReDim SyncPgs(icnt).arWrd(SyncPgs(icnt).pgHdr.nWords)
        SyncPgs(icnt).arWrd = arWords
    End If
    Next
    Close iFile
    Erase SyncHdr
    wb.Visible = True
    syncOpened = True
End Sub

谢谢,杰克。但是我尝试了你的解决方案,甚至我尝试了分配不同的数字,而不是使用freeFile,但再次出现相同的错误。@Varider我没有注意到你说你试图将二进制文件写入文本文件。你能解释一下你为什么要这么做吗?