150分-<<=------------*-*-*-*-*-*-解决我内存溢出的问题!!!

WangTiger 2000-05-18 08:30:00
因为需要,所以用VB做了个查找替换文件中含有特定字符的软件,成功了,但是对小文件还可以,但是一到大文件,它老是报告错误信息:" 运行时错误 "6" 溢出 "...
后来,到了中国共享软件准备上载,突然发现一个软件和我的这个功能一模一样,只是他用的是控件,我用的是模块罢了(BTW:英雄所见略同(不要吐我口水.$%#).).
我下载了,和我的问题一样,也是"溢出"... 745啦!

我该怎么办????????????????????

救救我!!!!!!!!!
...全文
334 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wuxyingshu 2001-06-23
  • 打赏
  • 举报
回复
hahaha
vbkiller 2001-06-23
  • 打赏
  • 举报
回复
呵呵,这个问题的提问人已经离开(看看提问日期吧^_^),大家不要来蹭分了,请到:http://www.csdn.net/expert/topic/168/168880.shtm
BENJOE 2001-06-23
  • 打赏
  • 举报
回复
1)采用文件流操作,不要把整个文件读入内存
2)变量说明时,请指定变量类型
vbkiller 2001-06-23
  • 打赏
  • 举报
回复
王老虎在睡大觉吧?
WangTiger 2001-01-17
  • 打赏
  • 举报
回复
哈罗
exwind 2001-01-17
  • 打赏
  • 举报
回复
哼!回答问题不给分!
whoo 2001-01-17
  • 打赏
  • 举报
回复
RichTextBox1.LoadFile ?
文件大了,RichTextBox放不下.建议你使用文件流,或是其他的文件炒作方法.总之不要一下子把文件全读进来就行了.
还哈罗呢?都快一年了.
KillerAPP 2001-01-17
  • 打赏
  • 举报
回复
哈楼
WangTiger 2000-05-19
  • 打赏
  • 举报
回复
??详细点好吗?
sanhan 2000-05-19
  • 打赏
  • 举报
回复
最好使用固定大小字节数组作为缓存分块读入,这样才能正确处理特殊字符。

不要使用字符串。
thriller 2000-05-19
  • 打赏
  • 举报
回复
用CopyMemory.
把字符串复制到字节数组再复制回来。
理论支持2^31个字节。
mxp 2000-05-19
  • 打赏
  • 举报
回复
对了,也不能一个字符一个字符来操作,有些特殊字符出错,如:空
mxp 2000-05-19
  • 打赏
  • 举报
回复
不能一下到串,容易溢出,速度也慢!!
mxp 2000-05-19
  • 打赏
  • 举报
回复
??不可能!除非你是一下都读到内存,用line input # 将文件读到一个数组,再写出,我试过,20M文件(再大写字板打开费时)没问题!如果要例子给我来信。
蝈蝈俊 2000-05-19
  • 打赏
  • 举报
回复
肯定有东西没有释放掉,看看源代码,什么没及时使放
liujin 2000-05-19
  • 打赏
  • 举报
回复
不知您是怎么实现的,若是文件操作,欲大文件时,分段操作,一次读入一部分,而且操作完要删除文件指针
tttk 2000-05-19
  • 打赏
  • 举报
回复
不知道你的源代码是什么?能否让我看一下?
WangTiger 2000-05-19
  • 打赏
  • 举报
回复
小文件可以,大文件就不行了...
还有一个模块,没有贴出来
WangTiger 2000-05-19
  • 打赏
  • 举报
回复
Dim Text
Dim found
Dim Found_2
Dim url
Dim File_no
Dim Writed_no
Option Explicit

Private Sub Command1_Click()
If Option1.Value = True Then
CommonDialog1.ShowOpen
RichTextBox1.LoadFile CommonDialog1.FileName, rtfText
Do
sReplace RichTextBox1.Text, Text1.Text, Text2.Text
Loop Until Text1.ToolTipText = "0"
RichTextBox1.SaveFile CommonDialog1.FileName, rtfText
Text1.ToolTipText = ""
Else
Dim starttime As Single

findfilesdir Text3.Text, Text4.Text

End If
Do Until List1.ListCount = 0
RichTextBox1.Text = ""
RichTextBox1.LoadFile List1.List(0), rtfText
Do
sReplace RichTextBox1.Text, Text1.Text, Text2.Text
Loop Until Text1.ToolTipText = "0"
RichTextBox1.SaveFile List1.List(0), rtfText
List1.RemoveItem 0
Text1.ToolTipText = ""


Loop
End Sub

Private Sub Command2_Click()
RichTextBox1.SelStart = 0

Do Until found = -1
found = RichTextBox1.Find(Text1.Text, RichTextBox1.SelStart, , rtfWholeWord)
If found <> -1 Then
RichTextBox1.Span "", True, True
RichTextBox1.SelText = Text2.Text
Else
MsgBox "没有查到!"
End If
Loop
End Sub


Public Sub findfilesdir(DirPath As String, FileSpec As String)
Dim filestring As String

DirPath = Trim$(DirPath)

If Right$(DirPath, 1) <> "\" Then
DirPath = DirPath & "\"
End If

filestring = Dir$(DirPath & FileSpec, vbArchive Or vbHidden Or vbSystem Or vbDirectory)
Do
DoEvents
If filestring = "" Then
Exit Do
Else
If (GetAttr(DirPath & filestring) And vbDirectory) = vbDirectory Then
If Left$(filestring, 1) <> "." And Left$(filestring, 2) <> ".." Then
End If
Else
url = DirPath & filestring
List1.AddItem url
File_no = File_no + 1
End If
End If

filestring = Dir$
Loop

End Sub

Private Sub Form_Load()
Writed_no = 0
File_no = 0
End Sub

Private Sub Form_Unload(Cancel As Integer)
End
End Sub

Private Sub Option1_Click()
Text3.Enabled = False
End Sub

Private Sub Option2_Click()
Text3.Enabled = True
End Sub


Function sReplace(SearchLine As String, SearchFor As String, ReplaceWith As String)
Dim vSearchLine As String, found As Integer

found = InStr(SearchLine, SearchFor): vSearchLine = SearchLine
If found <> 0 Then

vSearchLine = ""
If found > 1 Then vSearchLine = Left(SearchLine, found - 1)
vSearchLine = vSearchLine + ReplaceWith
If found + Len(SearchFor) - 1 < Len(SearchLine) Then _
vSearchLine = vSearchLine + Right$(SearchLine, Len(SearchLine) - found - Len(SearchFor) + 1)

End If
sReplace = vSearchLine

RichTextBox1.Text = sReplace
Text1.ToolTipText = found
End Function
Un1 2000-05-19
  • 打赏
  • 举报
回复
把你代码中所有Integer类型全部改为Long, 小于65536的常数全部加上&,例如:
a = a + 1
改为:
a = a + 1&

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧