今天搞文件操作時,犯了一個很低級的錯誤,記下下來備忘。
今天做了一個文件的寫操作
1.創建文件
2.打開
3.寫
4.關閉
我想一次創建多個文件,就用了一個循環。可是老是出現下面錯誤:(圖:error_filecreate)
#--------------------------------------------------------------------------------
# An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll
#
# Additional information: 由於另一個處理序正在使用檔案 "E:\temp\Admin.vb",所以無法存取該檔案。
#
#如圖:error_filecreate.jpg
#--------------------------------------------------------------------------------
我試了只創建一個文件,接著打開文件。結果:
#--------------------------------------------------------------------------------
#
#程序無法存取檔案,因為檔案正由另一個程序使用
#
#如圖:error_CreateThenOpen.jpg
#--------------------------------------------------------------------------------
我創建文件的代碼:
Public Sub WriteLog(ByVal fullPath As String, ByVal content As String)
If System.IO.Directory.Exists(GetDirectoryPath()) = False Then
System.IO.Directory.CreateDirectory(GetDirectoryPath())
Else
If File.Exists(fullPath) = False Then
'Dim _fs As FileStream = File.Create(fullPath)
'_fs.Close()
File.Create(fullPath)
End If
End If
'Dim fs As New FileStream(fullPath, FileMode.Append, FileAccess.Write)
Dim sw As StreamWriter = New StreamWriter(fullPath, True, System.Text.Encoding.GetEncoding("gb2312"))
sw.WriteLine(content)
sw.Flush()
sw.Close()
sw = Nothing
End Sub
我猜想可能是文件指針或句柄什麽的一直指向創建的第一個文件,我想close,沒有找到File.Close()方法。
百度一下,發現有人這些創建文件:
FileStream fs = File.Create(datafile);//创建xml文件
fs.Close();
StreamWriter sw = new StreamWriter(datafile, true, System.Text.Encoding.GetEncoding("gb2312"));
上面代碼使用了FileStream,FileStream提供Close,總算可以Close了。
最后使用上面的方法搞定了。
翻翻MSDN,文件創建例子如下:
Imports System
Imports System.IO
Imports System.Text
Public Class Test
Public Shared Sub Main()
Dim path As String = "c:\temp\MyTest.txt"
Try
If File.Exists(path) Then
' Note that no lock is put on the
' file and the possibliity exists
' that another process could do
' something with it between
' the calls to Exists and Delete.
File.Delete(path)
End If
' Create the file.
Dim fs As FileStream = File.Create(path)
Dim info As Byte() = New UTF8Encoding(True).GetBytes("This is some text in the file.")
' Add some information to the file.
fs.Write(info, 0, info.Length)
fs.Close()
' Open the stream and read it back.
Dim sr As StreamReader = File.OpenText(path)
Do While sr.Peek() >= 0
Console.WriteLine(sr.ReadLine())
Loop
sr.Close()
Catch ex As Exception
Console.WriteLine(ex)
End Try
End Sub
End Class
參照MSDN,規範的寫代碼準沒錯!