假设在一个文件夹内有很多个RTF文件,如何快速地把包含特定字符串的文件找出来?
难道要一个个的读入RichTextBox再慢慢的找?

解决方案 »

  1.   

    直接找即可。RTF是可读的ASCII文件,只是多了一些控制字符串。当然,为了避免完整文字被控制字符串切开,查找时屏蔽{}内部的内容
      

  2.   

    ' 假设要在c:\下的所有.rtf文件中搜索"aaa"字符串,可以这样.Option ExplicitPrivate Sub Command1_Click()
    Dim Str As String, dir As String
    Str = "aaa"
    dir = "c:\*.rtf"
    Shell "cmd /c findstr /m " & Chr(34) & Str & Chr(34) & " " & dir & " >>c:\1.txt"
    End SubPrivate Sub Command2_Click()
    Dim r As String
    Open "c:\1.txt" For Input As #1
        Do While Not EOF(1)
            Input #1, r
            Debug.Print r
        Loop
    Close
    Kill "c:\1.txt"
    End Sub
      

  3.   

    这是个迂回法。不过还是有个问题:比如:"关于<粗体>基因工程</粗体>的报告"你如果查“基因工程的报告”就查不到。
      

  4.   

    还是用RichTextBox吧,正如pigpag(噼里啪啦)所说的,直接用open语句查找文件的话,你不得不了解rtf文件格式,根据rtf文件格式进行解码。既然微软为我们封装了RichTextBox,为什么不用呢(至多把它的Visible属性设为false,应该可以满足你的要求了):'窗体:一个RichTextBox,一个listbox,一个按钮
    Option Explicit
    '没加错误处理,自己加吧
    '自定义过程getfiles
    '功能,从文件夹mfolder中,查找包含findstr字串的文件,将文件名显示在listbox中
    Private Sub getfiles(ByVal mfolder As String, ByVal findstr As String)
        List1.Clear
        Dim myfilelist As FileListBox
        Set myfilelist = Controls.Add("VB.filelistbox", "myfilelist")
        myfilelist.Path = mfolder
        myfilelist.Pattern = "*.rtf"
        Dim i As Long, filename As String
        Dim s As String
        Dim arrtemp As Variant
        If Right(mfolder, 1) <> "\" Then
            mfolder = mfolder + "\"
        End If
        For i = 0 To myfilelist.ListCount - 1
            filename = mfolder + myfilelist.List(i)
            Me.RichTextBox1.LoadFile filename
            s = Me.RichTextBox1.Text
            arrtemp = Split(s, findstr)
            If UBound(arrtemp) > 0 Then
                List1.AddItem filename
            End If
        Next
        Set myfilelist = Nothing
    End SubPrivate Sub Command1_Click()
        getfiles "c:\mc\", "mc"
    End Sub
    一开始,我曾考虑调用windows的查找文件对话框,但是,我很快发现windows的查找文件对话框可能实现不了楼主的要求如果,想调用windows的查找文件对话框的话,可以参考:用四种不同的方法来显示文件查找对话框
    http://www0.ccidnet.com/tech/msrc/2000/05/25/58_760.html
      

  5.   

    大家的方法比我的好,呵呵。
    其实也可以想办法把.rtf文件转换成纯文本格式,但效率又是个问题。  :(
      

  6.   

    RichTextBox 中的中文都是内码啊,查不到汉字的.
      

  7.   

    RichTextBox 中的中文都是内码啊,查不到汉字的谁说的?我上面的程序可以查找到汉字,测试通过
      

  8.   

    用richtextbox,可以选择是用ascii或者rtf来显示内容,这样就可以把要找的内容转为ascii来找,然后在改为rtf
      

  9.   

    RichTextBox 中的中文都是内码啊,查不到汉字的谁说的?我上面的程序可以查找到汉字,测试通过
    -------------------------------------------------------------
    是我说错,应该是RTF文件中的汉字是内码,直接打开看不到汉字。
      

  10.   

    对阿,RTF文件里面保存非ASCII字符可以用内码。中文好像用HZ编码