Open (filename) For Input As #1
    Do While Not EOF(1)
        Line Input #1, Intext
        logFile = logFile + Intext + vbCrLf
    Loop
Close #1logFile = logFile & Text1.TextOpen (filename) For Output As #1
    Print #1, logFile
Close #1filename 是从文本框中得到的文件名(需要包含路径吗?),运行时为什么总是提示“File already open”?

解决方案 »

  1.   

    filename 当然要包括详细的路径了!
      

  2.   

    1、初始时得到默认的文件名:
    Private Sub Form_Load()
        Text3.Text = App.Path & "\RollBookCalc.txt"
    End Sub'********************************************************2、通过一个选择文件的文本框得到文件名和路径:
    Private Sub cmdOpen_Click()
        CommonDialog1.Filter = "文本文件(*.txt)|*.txt"
        CommonDialog1.ShowSave
        If CommonDialog1.filename <> "" Then
            Text3.Text = CommonDialog1.filename
        End If
    End Sub'********************************************************3、获得文件名,并打开文件:
    Private Sub SaveResaultToFile()
        Dim Intext As String
        Dim logFile As String
        Dim temp_Filename As String
        Dim filename As String
        Dim i As Integer    temp_Filename = StrReverse(Trim(Text3.Text))
        For i = 1 To Len(temp_Filename)
            If Mid(temp_Filename, i, 1) = "\" Then
                filename = StrReverse(Mid(temp_Filename, 1, i - 1))
                Exit For
            End If
        Next
        temp_Filename = Trim(Text3.Text)
        If filename = "" Or IsNull(filename) Then
            MsgBox "请选择要保存的文件名之后再保存!", vbInformation, "提示:"
            Exit Sub
        End If    '先读取文件内容
        Open (filename) For Input As #1
            Do While Not EOF(1)
                Line Input #1, Intext
                logFile = logFile + Intext + vbCrLf
            Loop
        Close #1
        logFile = logFile & Text1.Text
        Open (filename) For Output As #1
            Print #1, logFile
        Close #1
    End Sub'********************************************************4、调用
    Private Sub cmdSaveText_Click()
        Call SaveResaultToFile
    End Sub然后就报错:
    File already open !
      

  3.   

    是:
    Run-Time Err "55"
    File already open
      

  4.   

    Private Sub Form_Load()
        Text3.Text = App.Path & "\RollBookCalc.txt"
    End Sub'********************************************************2、通过一个选择文件的文本框得到文件名和路径:
    Private Sub cmdOpen_Click()
        CommonDialog1.Filter = "文本文件(*.txt)|*.txt"
        CommonDialog1.ShowSave
        If CommonDialog1.filename <> "" Then
            Text3.Text = CommonDialog1.filename
        End If
    End Sub'********************************************************3、获得文件名,并打开文件:
    Private Sub SaveResaultToFile()
        Dim Intext As String
        Dim logFile As String
        Dim temp_Filename As String
        Dim filename As String
        Dim i As Integer    Filename = Trim(Text3.Text)
        If filename = "" Or IsNull(filename) Then
            MsgBox "请选择要保存的文件名之后再保存!", vbInformation, "提示:"
            Exit Sub
        End If    '先读取文件内容
        Open (filename) For Input As #1
            Do While Not EOF(1)
                Line Input #1, Intext
                logFile = logFile + Intext + vbCrLf
            Loop
        Close #1
        logFile = logFile & Text1.Text
        Open (filename) For Output As #1
            Print #1, logFile
        Close #1
    End Sub
    去掉
    temp_Filename = StrReverse(Trim(Text3.Text))
        For i = 1 To Len(temp_Filename)
            If Mid(temp_Filename, i, 1) = "\" Then
                filename = StrReverse(Mid(temp_Filename, 1, i - 1))
                Exit For
            End If
        Next
    多余的,
      

  5.   

    Open如果在打开时没有发现指定的文件,应该可以自动创建的,这个应该没错啊!
      

  6.   

    我刚才调试觉得:
    文件应该是没有创建的时候先创建呀
    你怎么是先读再写呢?是不是这个原因
    你把
    Open (filename) For Input As #1
            Do While Not EOF(1)
                Line Input #1, Intext
                logFile = logFile + Intext + vbCrLf
            Loop
        Close #1
        logFile = logFile & Text1.Text
        Open (filename) For Output As #1
            Print #1, logFile
        Close #1
    读写颠倒一下,先output再input试试
    是不是你所要解决的答案?
      

  7.   

    对不起,刚才上面说的颠倒位置错了:(领会错你程序的意思了,不好意思。不过我这的确没有出现文件已打开这样的报错;)这是你的错误提示:
    文件已打开(错误 55)
       有时候文件必须在其他 Open 或其他操作发生前先关闭。此错误有以下的原因和解决方法: 对一个已经打开的文件,执行顺序输出模式的 Open 语句。 
    必须将要打开成其他方式的顺序访问方式文件先关闭。例如,必须先将打开成 Input 的文件先关闭再打开成 Output。如 Kill、SetAttr 或 Name 等语句,引用到一个打开的文件。 
    在执行此语句前先关闭此文件。
      

  8.   

    给你个例子
    你自己调试看看是不是哪有问题:Option ExplicitPrivate Type file_structure
        datano As Byte
        datatext As String * 30
        'datatext(29) As String * 1
        intdata As Integer
        dbldata As Double
    End TypeDim filedata(4) As file_structurePrivate Sub cmdopen_Click()
    On Error Resume Next
    CommonDialog1.ShowOpen
    If Err.Number = 32755 Then
       Exit Sub
    End IfIf IsNull(CommonDialog1.FileName) = True Then
       Exit Sub
    End IfIf InStr(CommonDialog1.FileName, "FileIO") <> 0 ThenCall sdatadisplaycmdopen.Enabled = False
    cmdsave.Enabled = True
    End IfEnd Sub
    Private Sub sdatadisplay()Dim i As Integer
    Open CommonDialog1.FileName For Binary As #1
    For i = 0 To 4
       Get #1, , filedata(i)
       
       MSHFlexGrid1.TextMatrix(i + 1, 0) = filedata(i).datano
       MSHFlexGrid1.TextMatrix(i + 1, 1) = filedata(i).datatext
    '   Dim m As Integer    &#63730;
    '   Dim n As String
    '   For m = 0 To 29
    '    n = n + filedata(i).datatext(m)
    '   Next
    '   MSHFlexGrid1.TextMatrix(i + 1, 1) = n
       MSHFlexGrid1.TextMatrix(i + 1, 2) = filedata(i).intdata
       MSHFlexGrid1.TextMatrix(i + 1, 3) = filedata(i).dbldata
    Next
    Close #1End Sub
    Private Sub cmdsave_Click()
    On Error Resume NextCommonDialog1.ShowSaveIf Err.Number = 32755 Then
       Exit Sub
    End IfCall sdatasave
    End SubPrivate Sub sdatasave()
    Dim i As Integer
    Open CommonDialog1.FileName For Binary As #1
    For i = 0 To 4
        Put #1, Len(filedata(0)) * i + 1, filedata(i)
    NextClose #1
    End SubPrivate Sub cmdset_Click()
    If CInt(Text1(0).Text) < 0 Or CInt(Text1(0).Text) > 255 Then
        Exit Sub
    Else
        MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 0) = CInt(Text1(0).Text)
        filedata(MSHFlexGrid1.Row - 1).datano = CInt(Text1(0).Text)
    End IfMSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 1) = (Text1(1).Text)
    filedata(MSHFlexGrid1.Row - 1).datatext = (Text1(1).Text)MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 2) = (Text1(2).Text)
    filedata(MSHFlexGrid1.Row - 1).intdata = CInt(Text1(2).Text)MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 3) = (Text1(3).Text)
    filedata(MSHFlexGrid1.Row - 1).dbldata = CDbl(Text1(3).Text)cmdset.Enabled = False
    End SubPrivate Sub Form_Load()
    Dim i As Integer
        For i = 0 To 3
            If i <> 1 Then
            End If
        Next
     
    MSHFlexGrid1.ColWidth(0, 0) = 500
    MSHFlexGrid1.ColWidth(1) = 6000
    MSHFlexGrid1.TextMatrix(0, 0) = "NO."
    MSHFlexGrid1.TextMatrix(0, 1) = "Data Text"
    MSHFlexGrid1.TextMatrix(0, 2) = "INTEGER"
    MSHFlexGrid1.TextMatrix(0, 3) = "DOUBLE"CommonDialog1.CancelError = True
    CommonDialog1.FileName = "FileIO"
    CommonDialog1.Filter = "TEXT FILE(*.TXT)|*.TXT"
    CommonDialog1.InitDir = App.Path
    End SubPrivate Sub MSHFlexGrid1_Click()
    If cmdsave.Enabled = False Then
       Exit Sub
    End IfDim i As Integer
    'i = MSHFlexGrid1.Row - 1
    i = MSHFlexGrid1.RowText1(0).Text = MSHFlexGrid1.TextMatrix(i, 0)
    Text1(1).Text = MSHFlexGrid1.TextMatrix(i, 1)
    Text1(2).Text = MSHFlexGrid1.TextMatrix(i, 2)
    Text1(3).Text = MSHFlexGrid1.TextMatrix(i, 3)'Text1(0).Text = CInt(filedata(i).datano)
    'Text1(1).Text = Trim(filedata(i).datatext)
    'Text1(2).Text = CInt(filedata(i).intdata)
    'Text1(3).Text = CDbl(filedata(i).dbldata)cmdset.Enabled = TrueEnd Sub
      

  9.   

    我估计是你用别的软件打开那个输出文件了吧,或者进程中有一个未完成的进程,在读写那个文件,但进程以死,你应该试试重起一下,然后再运行。还有,你应该确定出错的行,你应该运行后,在关键部位都设置中断,看看到底是哪一行执行就出错了,这应该是解决问题的关键。Input用#1,Output用#2试试
      

  10.   

    不用#1intFile=FreeFile
    用#intFile
    **********************************
    *本人主要使用VB+MS SQL,C#略知一二
    *                                
    *如有相关问题需要帮助            
    *                                
    *可发短消息告知链接    
    *
    *助人为快乐之本!         
    **********************************
      

  11.   

    没有用Open,用
    Set fil = fso.CreateTextFile(strFileName, True)
    把问题解决了:)