在其他用户在这个问题中提出了一些很好的论点:How to write to a text file inside of the application后,我决定不使用资源文件,而是在文件夹中创建一个文件。然后从那里读/写。
虽然由于某种原因,我似乎无法写入有问题的文件,但它不断抛出异常,告诉我该文件已被其他进程使用。
这是我用来写这个文件的代码。
If System.IO.File.Exists(credentials) Then
Dim objWriter As New System.IO.StreamWriter(credentials, False)
objWriter.WriteLine(remember)
objWriter.Close()
Else
System.IO.Directory.CreateDirectory(Mid(My.Application.Info.DirectoryPath, 1, 1) & ":\ProgramData\DayZAdminPanel")
System.IO.File.Create(credentials)
Dim objWriter As New System.IO.StreamWriter(credentials, False)
objWriter.WriteLine(remember)
objWriter.Close()
End If
关于如何写入相关文本文件的任何想法?
答案 0 :(得分:2)
您的应用程序的上一次迭代很可能无法正确关闭对StreamWriter中文件的访问。由于您的构造函数设置为覆盖(而不是追加)文件,因此可能是源。
尝试使用“使用”语句设置应用程序以正确打开/关闭文件:
If System.IO.File.Exists(credentials) Then
Using objWriter As StreamWriter = New StreamWriter(credentials, False)
objWriter.WriteLine(remember)
objWriter.Close()
End Using
Else
System.IO.Directory.CreateDirectory(Mid(My.Application.Info.DirectoryPath, 1, 1) & ":\ProgramData\DayZAdminPanel")
System.IO.File.Create(credentials)
Using objWriter As StreamWriter = New StreamWriter(credentials, False)
objWriter.WriteLine(remember)
objWriter.Close()
End Using
End If
使用Using块和close语句看起来相当多余,但这确保即使发生异常也可以访问您的文件。
答案 1 :(得分:1)
您正在尝试在公共应用程序数据目录中创建目录。应使用Environment类方法和枚举找到此目录,因为操作系统之间存在差异。但是,您使用值credentials
作为文件名。我想你想将你的数据文件存储在公共应用程序目录中,而不是存放在没有写入数据文件权限的地方(比如C:\ program files(x86))。
然后,为避免文件流未正确关闭的问题,请尝试使用Using statement来确保正确关闭和处理文件资源(无需在使用中调用close)。
另外,请注意StreamWriter完全能够创建文件(如果文件不存在)或者您希望覆盖以前的内容(为Append
标志传递false)。
所以你的代码可以简化为这些代码。
' Get the common application data directory (could be different from Win7 and XP)
Dim workDir = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
' Combine with your own working data directory
workDir = Path.Combine(workdir, "DayZAdminPanel")
' Create if not exists
If Not Directory.Exists(workDir) Then
Directory.CreateDirectory(workDir)
End If
' Create/Overwrite your data file in a subfolder of the common application data folder
Dim saveFile = Path.Combine(workDir, Path.GetFileName(credentials))
Using objWriter = New System.IO.StreamWriter(saveFile, False)
objWriter.WriteLine(remember)
End Using
答案 2 :(得分:0)
File.Create
返回一个打开的FileStream
,你应该在后续传递给StreamWriter
构造函数,而不是再次传递文件名,或者你可以省略File.Create
完全打电话。
您可能希望查看Using
的{{1}}块,以便可预测地关闭。