我有一個函數可以創建包含一些數據的.xml文件。每次首先刪除舊文件。一切工作正常,除了它有時被凍結,文件本身被鎖定。它的大小是0 kb,程序甚至不能刪除它。我必須殺死進程,自己刪除文件,然後再次運行程序。是否有可能在開始新程序之前殺死同一程序的所有進程?或者至少在其上放置一些定時器以確保它在一段時間過後自動關閉?Visual Fox Pro文件訪問
需要一些想法,謝謝。
fHandle = f_cFile("D:\Data\new_eur\Saskaitos.xml")
if fHandle < 0
**=messagebox("Can't create file!",16,"!!!")
=STRTOFILE("Can't create XML file" + CHR(13) + CHR(10), "d:\Log.txt", 1)
quit
ENDIF
** Header
if fputs(fHandle, '<?xml version="1.0" encoding="windows-1257"?>') < 0
=fclose(fHandle)
=STRTOFILE("Can't write to XML file" + CHR(13) + CHR(10), "d:\Log.txt", 1)
quit
endif
=STRTOFILE(TTOC(dateTIME()) + ": " + "XML ok"+CHR(13)+CHR(10), "d:\LogData.txt", 1)
=fputs(fHandle, "<Accounts>")
enteris = CHR(13)
DO WHILE NOT EOF()
=fputs(fHandle, "<Detali>")
=fputs(fHandle, "<Snr><![CDATA[" + ALLTRIM(Data.dok_nr) + "]]></Snr>" + enteris)
=fputs(fHandle, "<Code_ks><![CDATA[" + ALLTRIM(Data.Code_ks) + "]]></Code_ks>" + enteris)
=fputs(fHandle, "<Sdata>" + ALLTRIM(Data.dok_data) + "</Sdata>" + enteris)
=fputs(fHandle, "<Term>" + ALLTRIM(Duomenys.Terminas) + "</Term>" + enteris)
=fputs(fHandle, "<Manager><![CDATA[" + ALLTRIM(Data.Code_ms) + "]]></Manager>" + enteris)
IF Data.val_poz = 0
=fputs(fHandle, "<MokSuma>" + ALLTRIM(STR(Duomenys.SumaMok, 12, 2)) + "</MokSuma>" + enteris)
=fputs(fHandle, "<ApSuma>" + ALLTRIM(STR(Duomenys.ApSuma, 12, 2)) + "</ApSuma>" + enteris)
ELSE
=fputs(fHandle, "<MokSuma>" + ALLTRIM(STR(Duomenys.SumaVal, 12, 2)) + "</MokSuma>" + enteris)
=fputs(fHandle, "<ApSuma>" + ALLTRIM(STR(Duomenys.ApVal, 12, 2)) + "</ApSuma>" + enteris)
ENDIF
=fputs(fHandle, "</Detali>")
skip
ENDDO
fputs(fHandle, "</Accounts>")
=fclose(fHandle)
現在這是將xml數據放入文件的代碼。在某個時候,它會凍結,下一次程序啓動時它仍然使用相同的文件。
功能f_cFile:
FUNCTION f_cFile
PARAMETERS fName
fHandle = fcreate(fName)
IF fHandle < 0
IF FILE(fName,1)
DELETE FILE fName
IF FILE(fName,1)
=STRTOFILE("Can't delete old file: " + fName + CHR(13) + CHR(10), " d:\Log.txt", 1)
ELSE
fHandle = fcreate(fName)
ENDIF
ENDIF
ENDIF
RETURN fHandle
ENDFUNC
你能粘貼你正在做的代碼來創建XML文件並嘗試刪除嗎?使用CursorToXML()還是使用XMLAdapter類,它是低級的還是簡單的? – DRapp
我編輯了第一篇文章,添加了一些代碼部分,可能現在更清楚。 – The50
您的代碼似乎正在以VFP中最快的方式進行。我想你應該提供關於這些文件的信息以及它們是如何相關的。但請注意,不是fHandle,而是使用m.fHandle。您不需要'enteris'變量,Fputs()會自動添加CR(chr(13))和LF(chr(10))。奇怪的是,這段代碼掛起(提醒我數據在遠程機器上,網絡非常慢 - 那麼我完全不信任使用File())。 –