以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  WriteAllText出现“文件被另一进程使用”,可能什么问题?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=84178)

--  作者:wfkbabro
--  发布时间:2016/4/25 11:23:00
--  WriteAllText出现“文件被另一进程使用”,可能什么问题?

WIN8,64位,调试代码时输出了很多内容到日志文件,比较密集。

FileSys.WriteAllText("c:\\11.txt","调试内容", true)

然后就出错了:


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20160425111829.png
图片点击可在新窗口打开查看

 

另一台电脑WIN7,64位,同样的代码不出错。

 

 

两台电脑版本均为:  2014-11-11

 

顺便问下目前最新的版本,版本号在主界面有地方看了吗?谢谢


--  作者:大红袍
--  发布时间:2016/4/25 11:26:00
--  

加上try Cacth看看

 

http://www.foxtable.com/help/topics/2070.htm

 


--  作者:wfkbabro
--  发布时间:2016/4/25 11:32:00
--  
以下是引用大红袍在2016/4/25 11:26:00的发言:

加上try Cacth看看

 

http://www.foxtable.com/help/topics/2070.htm

 

谢谢,已明确是 WriteAllText 出的错,

但用try 只能跳过错误,还是不明白怎么纠错

谢谢,

望指点。

 

Try
   代码一
Catch ex As Exception
   出错执行代码二
End Try
不出错执行后续代码三


--  作者:wfkbabro
--  发布时间:2016/4/25 11:34:00
--  

函数debugLog 里面,没有互锁的逻辑,就是WriteAllText  追加写入

是不是WriteAllText 处理多个写入任务时出错了?要重新安装或注册什么控件吗?谢谢。


--  作者:大红袍
--  发布时间:2016/4/25 11:34:00
--  

 如果报错,就是这个时候.txt文本正在被别的程序打开和使用中。

 

 你可以弄一个循环,不断尝试写入即可,如代码

 

do while true
    try
        FileSys.WriteAllText("d:\\test.txt", "abcd", True)
        Exit Do
    catch ex As exception
       
    End try
Loop

 


--  作者:wfkbabro
--  发布时间:2016/4/25 13:23:00
--  

试了。可以确定问题如下:

1.WriteAllText 用命令测试时,循环写入没问题,比如写入abcd

2.WriteAllText 用在程序中写文件文件时,即便写入abcd,也要出问题。

3.在WIN8 64位出错,在另一台WIN7 64位不出错,在另一台WIN7 32位也不出错

4.不知道怎么处理了。幸好在客户那没出岁暮。

 

测试代码:

Vars("P_strLogFile") = "C:\\FoxtableDebug日志.txt"
\'写入C盘不报错,但没有新文件出来。
Vars("P_strLogFile") = "d:\\FoxtableDebug日志.txt"


dim i,t1
t1 = Vars("P_strLogFile")
for i=1 to 1000
    try
        FileSys.WriteAllText(t1, i & ":abcd" & vbcrlf, True)

    catch ex As exception
       
    End try
next

msgbox("ok")


此主题相关图片如下:qq截图20160425130529.png
按此在新窗口浏览图片

此主题相关图片如下:qq截图20160425130548.png
按此在新窗口浏览图片
[此贴子已经被作者于2016/4/25 13:23:26编辑过]

--  作者:大红袍
--  发布时间:2016/4/25 14:22:00
--  

 那试试这样

 

Do While True
    try
        Dim path As String = "d:\\test.txt"
        If Not io.File.Exists(path) Then
            Dim myfile As New IO.FileInfo(path)
            Dim fs As IO.FileStream = myfile.Create()
            fs.Close()
        End If
        Dim sw = io.File.AppendText(path)
        sw.WriteLine("12345678")
        sw.Flush()
        sw.Close()
       
        Exit Do
    catch ex As exception
        msgbox(ex.message)
    End try
Loop