该程序的功能:动态向一个FTP服务器上传文件,所传文件由其它程序每4分钟生成一次且存放在Z盘根目录下
存在的问题:程序执行后,或上传一次文件或上传失败,都会报错(应用程序错误,"0x01c6d7c2"指令引用"0x01c6d7c2"内存,该内存不能为"read"。)
但是如果手动debug执行则无此错误,不知道原因是什么,如何改正,还请高手指教,非常感谢!
Private 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
Private Declare Function SleepEx Lib "kernel32" (ByVal dwMilliseconds As Long, ByVal bAlertable As Long) As LongDim filename As String
Dim filedir  As String
Dim n As LongPrivate Sub WriteFTP(str As String) '上传文件 str为文件名
Inet1.URL = "ftp://211.152.199.46:21/"
Inet1.Protocol = 2
Inet1.UserName = "ftpser" ' "username"
Inet1.Password = "ftpser" ' "password"
Dim filstr As String
filstr = filedir & str
Inet1.Execute , "PUT " & filstr & " " & str
'SleepEx 2000, 0
Do While Inet1.StillExecuting
DoEvents
Loop
Inet1.Execute , "close"
Do While Inet1.StillExecuting
DoEvents
Loop
Text1.Text = str  '在窗口的TEXT控件中更新文件名
End SubPrivate Function findfile() As String  '在Z盘根目录下查找最新的文件
Dim Ret As Long
Dim FileObj As File
Dim dt As Date
Dim FSO As FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim FileStr As String
Dim FinalFile As String
FileStr = Dir(filedir & "*.csv")dt = DateAdd("n", -5, Now) 
Do While FileStr <> ""
  Set FileObj = FSO.GetFile(filedir & FileStr)
  If dt < FileObj.DateLastModified Then
    FinalFile = FileStr
  End If
  FileStr = Dir
Loop
findfile = FinalFile
End FunctionPrivate Sub Form_Load()
  filedir = "z:\"
  filename = findfile()
  If filename <> "" Then
     SleepEx 1000, 0
     Call WriteFTP(filename)
  End If
  
  Timer1.Enabled = True
  Timer1.Interval = 10000 
 
End SubPrivate Sub Timer1_Timer()   '每10秒循环一次  Dim filelast As String
  
  filelast = findfile()  If filelast <> "" And filelast <> filename Then
     SleepEx 1000, 0
     Call WriteFTP(filelast)
     filename = filelast
  End If
End Sub

解决方案 »

  1.   

    0x01c6d7c2这种错误发生在控件上, 说明控件有bug,你可以更新看看
    否则只能绕过这个错误。你读文件的时候,如果别人正在写这个文件, 那么有可能产生冲突。
    假如控件不能处理, 则出问题。
    你可以让别的“写文件的程序”写一个 xx.xxx.tmp的文件
    一但写完了以后, 在rename xx.xxx.tmp 为xx.xxx
    这样你的程序就保证找到这个文件时,始终是完整的,关闭的。同样, 你传文件到服务器上时, 也应该传一个xx.xxx.tmp
    然后上传完毕后, 在rename xx.xxx.tmp 为xx.xxx
    保证如果你传的过程中, 别人无法从ftp下载读取。
      

  2.   

    我也有寫過相同功能的模快,是用循環然後在windows中排JOB來做的,看你的代碼應該沒什麼問題
    很有可能是pigsanddogs(我爱吃猪肉,但是长不胖,为什么??) 這位大哥說的原因
    (我傳文件時不會有讀寫衝突,所以沒碰到過)
      

  3.   

    我也碰到過這樣的問題.把你的控件或是你程序中調用的.dll相關的應用程序重新安裝一下