我写了一个程序,要读写很多配置文件,用了循环嵌套,运行后发现占用CPU 100%,主要是打开关闭文件次数太多,有没什么好方法?

解决方案 »

  1.   

    sorry代码在单位不在家。结构是这样的。
    wdmc.ini:  0101|0102|0103|0104|0105|...*
               0201|0202|0203|0204|0205|...*
               ...
    wdfl.ini:  101001|101002|101003|101004|...*
               201001|201002|201003|201004|...*
               ...Set fil1 = fso.GetFile("wdmc.ini")
    Set ts1 = fil1.OpenAsTextStream(ForReading)
    Do While Not ts1.AtEndOfStream
       a=ts1.readline   'a=0101|0102|0103|0104|0105|...*
       b=0   
       do
          b=mid(a,5+b,1)
          ...
          Set fil2 = fso.GetFile("wdfl.ini")
          Set ts2 = fil2.OpenAsTextStream(ForReading)
          Do While Not ts2.AtEndOfStream
             ...
             do 
                ...
             loop while xx="|"
          loop
          ts2.close
          b=b+5
       loop while x="|"
    loop
    ts1.close
      

  2.   

    为什么不用读写INI文件的API函数实现??
    你用fso又何必叫ini文件呢?:)
      

  3.   

    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpRetunedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
    Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lplFileName As String) As Long
    Public Function GetINI(AppName As String, KeyName As String, FileName As String) As String
     Dim RetStr As String
     RetStr = String(255, Chr(0))
     GetINI = Left(RetStr, GetPrivateProfileString(AppName, ByVal KeyName, "", RetStr, Len(RetStr), FileName))
    End FunctionPublic Function WriteIni(AppName As String, KeyName As String, InString As String, FilePath As String) As String
     Dim r As Integer
     r = WritePrivateProfileString(AppName, KeyName, InString, FilePath)
    End Function
      

  4.   

    操作代码
    Private Sub Write_Click()
    Call WriteIni("hoho", Text1.Text, Text2.Text, "d:\a.ini")
    End SubPrivate Sub Read_Click()
    Text2.Text = GetINI("hoho", Text1.Text, "d:\a.ini")
    End Sub
    就是这么简单:)
      

  5.   

    51365133(渊海):
    能不能说明一下,"hoho","text1.text","text2.text","d:\a.ini" 这些参数是什么?Private Sub Write_Click()
    Call WriteIni("hoho", Text1.Text, Text2.Text, "d:\a.ini")
    End SubPrivate Sub Read_Click()
    Text2.Text = GetINI("hoho", Text1.Text, "d:\a.ini")
    End Sub能不能说明一下,多谢了...
      

  6.   

    GetPrivateProfileString VB声明 
    Declare Function GetPrivateProfileString& Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) 
    说明 
    为初始化文件中指定的条目取得字串 
    返回值 
    Long,复制到lpReturnedString缓冲区的字节数量,其中不包括那些NULL中止字符。如lpReturnedString缓冲区不够大,不能容下全部信息,就返回nSize-1(若lpApplicationName或lpKeyName为NULL,则返回nSize-2) 
    参数表 
    参数 类型及说明 
    lpApplicationName String,欲在其中查找条目的小节名称。这个字串不区分大小写。如设为vbNullString,就在lpReturnedString缓冲区内装载这个ini文件所有小节的列表 
    lpKeyName String,欲获取的项名或条目名。这个字串不区分大小写。如设为vbNullString,就在lpReturnedString缓冲区内装载指定小节所有项的列表 
    lpDefault String,指定的条目没有找到时返回的默认值。可设为空("") 
    lpReturnedString String,指定一个字串缓冲区,长度至少为nSize 
    nSize Long,指定装载到lpReturnedString缓冲区的最大字符数量 
    lpFileName String,初始化文件的名字。如没有指定一个完整路径名,windows就在Windows目录中查找文件 
    注解 
    如lpKeyName参数为vbNullString,那么lpReturnedString缓冲区会载入指定小节所有设置项的一个列表。每个项都用一个NULL字符分隔,最后一个项用两个NULL字符中止。也请参考GetPrivateProfileInt函数的注解
     
    其他 
    在vb的api文本查看器中复制的声明为:Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long 
      

  7.   

    WritePrivateProfileString VB声明 
    Declare Function WritePrivateProfileString& Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As String, ByVal lpFileName As String) 
    说明 
    在初始化文件指定小节内设置一个字串 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    lpApplicationName String,要在其中写入新字串的小节名称。这个字串不区分大小写 
    lpKeyName Any,要设置的项名或条目名。这个字串不区分大小写。用vbNullString可删除这个小节的所有设置项 
    lpString String,指定为这个项写入的字串值。用vbNullString表示删除这个项现有的字串 
    lpFileName String,初始化文件的名字。如果没有指定完整路径名,则windows会在windows目录查找文件。如果文件没有找到,则函数会创建它 
    其他 
    在vb的api文本查看器里复制的声明如下:
    Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long