所以我有一个空中应用程序,我想将数据保存到自定义文件中。以下是我的代码。我的问题是,此代码检查用户是否未在其文件名中键入“.bar”,如果没有,则程序会将其添加到文件名的末尾。
我的问题是,如果用户输入“newFile.foo”,它会将文件保存为“newFile.foo.bar”。如何阻止用户键入扩展名,或者让应用程序删除“.foo”部分,或者任何其他可以获得所需结果的选项。
感谢。
var file:File = File.desktopDirectory
file.browseForSave("Save");// Create a <projectStrings /> node
var projectStrings:XML = new XML(<projectStrings />);
// Create a <strings /> node
var strings:XML = new XML(<strings />);
strings.@stringOne = "Hello";
strings.@stringTwo = "World";
// Add the <strings> node to the <projectStrings> node.
projectStrings.appendChild(strings);
var saveFile:File = File(e.target);
var directory:String = saveFile.url;
if (directory.indexOf(".ugags") == -1) {
trace("WRONG");
directory += ".ugags";
}
var file:File = new File(directory);
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.WRITE);
fileStream.writeUTFBytes(projectStrings);
fileStream.close();
答案 0 :(得分:2)
您可以使用lastIndexOf String方法来检测文件扩展名:
var nameStart:int = Math.max(fileName.lastIndexOf("/"), fileName.lastIndexOf("\"));
var extStart:int = fileName.lastIndexOf(".");
if (ext <= nameStart)
{
//no extention at all
fileName += ".foo";
}
else
{
if (fileName.substr(extStart) != ".foo")
{
//user given other extension
}
}
答案 1 :(得分:0)
一个花哨的正则表达式会更简洁地做到这一点。但你可以分开“。”然后根据您的要求重新组装部件。
var fileParts:Array = directory.split('.');
var lastIndex:int = fileParts.length - 1;
var lastPart:String = fileParts[lastIndex];
// reassmble the initial parts
directory = "";
for (var i:int = 0; i < lastIndex; i++)
{
if (i != 0)
directory = directory + "_" + fileParts[i];
else
directory = fileParts[0];
}
if (lastPart == "ugags")
directory += ".ugags";
else
directory = directory + "_" + lastPart + ".ugags";