【发布时间】:2013-08-11 19:49:24
【问题描述】:
我正在使用 Haxe 和 OpenFL,并且我有一个生成 Xml 文件的程序。
但是,我不知道如何保存该文件。我可以创建 Xml 树并检查它是否有效,但对于我的生活,我无法弄清楚如何编写文件。
那么,简单来说,如何在 Haxe 中编写(和创建)文件?我希望能够将我新创建的 Xml 文件(它们用作我的程序的一种设置文件和初始化文件)保存在计算机上,以便我以后可以加载它?
【问题讨论】:
我正在使用 Haxe 和 OpenFL,并且我有一个生成 Xml 文件的程序。
但是,我不知道如何保存该文件。我可以创建 Xml 树并检查它是否有效,但对于我的生活,我无法弄清楚如何编写文件。
那么,简单来说,如何在 Haxe 中编写(和创建)文件?我希望能够将我新创建的 Xml 文件(它们用作我的程序的一种设置文件和初始化文件)保存在计算机上,以便我以后可以加载它?
【问题讨论】:
写完这个问题就找到了解决办法。
解决方法是先用 sys.io.File.write() 创建文件,然后用 File.saveContent() 保存数据。你可以用 toString 函数从 XML 中获取字符串,最终的解决方案是这样的这个:
if (!FileSystem.exists("maps"))
{
FileSystem.createDirectory("maps");
}
var number:Int = 1;
if (FileSystem.exists("maps/" + filename + ".xml"))
{
while(FileSystem.exists("maps/" + filename + number +".xml"))
{
number++;
}
filename = filename + number;
}
File.write("maps/" + filename + ".xml", false);
File.saveContent("maps/" + filename + ".xml", root.toString());
这将检查目录是否存在,如果不存在,则创建它,如果文件存在,则创建一个新的编号文件而不是覆盖它(目前,仍在使用保存功能)
此解决方案仅适用于 c++,尚未对其他解决方案进行过多测试,但 Flash 无法正常工作
【讨论】:
File.write吗?我认为File.save content() 应该足够了。这应该适用于所有“sys”平台:cpp、neko、php。我很惊讶 C# 和 Java 还不支持这些标准类。如果你感兴趣的话,我相信还有 Air 和 NodeJS 的实现。如果是这样,请告诉我,我会找到链接...
File.write() 是不正确的。 File.saveContent() 将数据写入新文件,或者,如果该文件已经存在,则替换其所有内容(请参阅implementation)。如果您留下那个打开的文件描述符,那么在这里使用File.write() 是一个无操作甚至可能是一个错误。最后,您无法在 Flash 上运行它的原因是 sys.* API 仅适用于所谓的“sys”目标(Neko、Java、C++ ...)。