0

所以我有一个空中应用程序,我想将数据保存到自定义文件中。下面是我的代码。我的问题是,这段代码正在检查用户是否没有在他们的文件名中输入“.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();
4

2 回答 2

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
  }
}
于 2012-04-28T07:32:30.650 回答
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";
于 2012-04-28T08:36:52.853 回答