所以,我发现了问题,但我不知道为什么会这样。
当写入时,会在.conf文件的开头插入3个额外的二进制字符。
它们是:???,十六进制EF BB BF。我不知道他们来自哪里。
有任何想法吗?
另外,抱歉VB6 / VB.NET混乱。我错了。
谢谢, B.J.
你应该使用 System.IO.File 代替 My.Computer.FileSystem
System.IO.File
My.Computer.FileSystem
要避免BOM,您需要指定没有BOM的编码,请使用 System.Text.Encoding.Default
System.Text.Encoding.Default
My.Computer.FileSystem.WriteAllText("c:\test.txt", fileString, False, System.Text.Encoding.Default)
虽然这个方便的方法很好,我仍然喜欢手动创建一个FileStream对象,所以我可以设置共享标志,确保没有人访问我的文件,直到我完成它:
Using FS As New System.IO.FileStream("c:\test.txt", IO.FileMode.Create, IO.FileAccess.Write, IO.FileShare.None) Using SW As New System.IO.StreamWriter(FS, System.Text.Encoding.Default) SW.WriteLine(fileString) End Using End Using
这个问题完全可能是由与文件访问无关的东西引起的 - 我认为附加的第一点是检查EventLogs是否有来自服务的错误消息,和/或在调试器中运行脚本并检查以查看如果文件在服务启动调用之前真正锁定。
也就是说,如果您使用的是VB.Net,我建议使用资源的正确方法是 总是 在使用声明中:
Using tempFile = My.Computer.FileSystem.OpenTextFileWriter(x, False) as System.IO.StreamWriter tempFile.Write(fileSting) tempFile.Close() End Using
如果这实际上是VB6(最初在问题中描述),那么你需要拆除文件对象,并释放内存(因为VB6不是垃圾收集,你需要明确地这样做)。将文件设置为Nothing应该释放文件上的锁:
Set tempFile = Nothing