Golang:将封送处理xml写入文件
我有一个编组XML的字节数组,如果我使用os库将其写入文件:Golang:将封送处理xml写入文件,xml,intellij-idea,go,Xml,Intellij Idea,Go,我有一个编组XML的字节数组,如果我使用os库将其写入文件: fh, _ := os.OpenFile("filename", os.O_CREATE, 0644) _, err := fh.Write(XMLByteArray) 我在文件末尾收到了一堆垃圾,好像这是一个糟糕的写入: <project version="4"> <component name="test"> <option name="urls"> <list&
fh, _ := os.OpenFile("filename", os.O_CREATE, 0644)
_, err := fh.Write(XMLByteArray)
我在文件末尾收到了一堆垃圾,好像这是一个糟糕的写入:
<project version="4">
<component name="test">
<option name="urls">
<list></list>
</option>
</component>
</project> </option>
</component>
</project>on>
</component>
</project>
我得到了正确的XML:
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="test">
<option name="urls">
<list></list>
</option>
</component>
</project>
这是我真的不明白的部分。此文件是动态路径生成的结果,是IntelliJ的配置。如果我使用os.Write()
,然后正确地关闭文件处理程序,IntelliJ会立即读取文件,但由于XML混乱而出错。如果我使用ioutil.WriteFile()
编写该文件,该文件看起来是正确的,但IntelliJ无法识别该文件是否存在
因此,我的问题是:
os.Write()
和ioutil.WriteFile()
之间有什么区别在
OpenFile
调用中,该文件已存在,正在重新打开且未被截断。写入的数据小于文件的内容,因此只覆盖文件的开头,在结尾留下垃圾
根据,您可以在打开时截断文件:
os.OpenFile("filename", os.O_CREATE | os.O_TRUNC, 0644)
或使用
这基本上就是iotuil.WriteFile所做的(请参阅)
如果IntelliJ没有足够的权限,它可能无法打开该文件。尝试在代码中将权限更改为0666,并检查是否使用这些权限创建了文件。注意:如果文件已存在,则忽略权限参数。此外,创建文件时设置的权限可能会受到进程的限制。在
OpenFile
调用中,文件已存在,正在重新打开且未被截断。写入的数据小于文件的内容,因此只覆盖文件的开头,在结尾留下垃圾
根据,您可以在打开时截断文件:
os.OpenFile("filename", os.O_CREATE | os.O_TRUNC, 0644)
或使用
这基本上就是iotuil.WriteFile所做的(请参阅)
如果IntelliJ没有足够的权限,它可能无法打开该文件。尝试在代码中将权限更改为0666,并检查是否使用这些权限创建了文件。注意:如果文件已存在,则忽略权限参数。另外,创建文件时设置的权限可能会受到流程的限制。这基本上就是修复方法,我选择了
os.O_CREATE | os.O_TRUNC | os.O_RDWR
作为我的文件模式,效果很好。至于IntelliJ问题,我只是有糟糕的XML;没有很好的记录。谢谢这基本上就是修复方法,我使用了os.O_CREATE | os.O_TRUNC | os.O_RDWR
作为我的文件模式,效果很好。至于IntelliJ问题,我只是有糟糕的XML;没有很好的记录。谢谢