У меня есть массив байт сортируются, XML, если я пишу его в файл, используя библиотеку ОС:Golang: написать маршал XML в файл
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>
Если я пишу с гипергликемией/ioutil библиотеки, как это:
err = ioutil.WriteFile("filename", XMLByteArray, 0644)
if err != nil {
log.Fatal(err)
}
Я получаю надлежащий 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()
? - Почему эта разница заставляет байтовый массив писать по-другому?
Это было по существу исправление, я пошел с 'os.O_CREATE | os.O_TRUNC | os.O_RDWR' как мои режимы файлов, и это сработало просто отлично. Что касается проблемы IntelliJ, у меня просто был плохой XML; не задокументированы очень хорошо. Благодаря! – mxplusb