防止用户在空中应用程序中将文件扩展名包含在文件名中

时间:2012-04-28 06:44:48

标签: flash actionscript-3 file-format xml

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

2 个答案:

答案 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";