【问题标题】:Prevent user from including file extension in file name in air application防止用户在空中应用程序的文件名中包含文件扩展名
【发布时间】:2012-04-28 06:44:48
【问题描述】:

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

【问题讨论】:

  • 因为这是一个与游戏开发无关的编程问题,并且不会从游戏开发者那里得到比一般程序员更好的答案,it is off topic 属于 SO。
  • 你不应该,如果用户希望文件名中的点让他拥有它。

标签: flash actionscript-3 file-format xml


【解决方案1】:

您可以使用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
  }
}

【讨论】:

    【解决方案2】:

    一个花哨的正则表达式会更简洁地做到这一点。但是你可以只在“。”上拆分。然后根据您的要求重新组装零件。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 2022-10-15
      • 2011-10-10
      • 2016-12-06
      • 2012-03-03
      • 2018-09-20
      相关资源
      最近更新 更多