-1

早上好!所以这里是基本代码,我从“使用 Adob​​e Flash Professional CS5.5 和 Flash Builder 4.5 进行移动开发”教程中获得。几乎是基本代码,但那些混蛋没有提供任何有关 DELETE 功能的信息。这是我第一次申请这个,所以需要帮助!

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           height="494" creationComplete="readFile()"> 
<fx:Script> 
<![CDATA[ 


import mx.collections.ArrayCollection; 
[Bindable] public var todo_items:ArrayCollection;     
private function readFile():void 
{ 
    var todoFile:File =File.applicationStorageDirectory.resolvePath("todo.txt"); 

    if (todoFile.exists) 
    { 
        var fs:FileStream = new FileStream(); 
        fs.open(todoFile, FileMode.READ); 
        var result:String = fs.readUTFBytes(fs.bytesAvailable); 
        var items:Array = result.split("\n"); 
        items.pop(); 
        todo_items = new ArrayCollection(items); 
        fs.close(); 
    } 
    else { trace("Aplication cant find the file"); 
    } 
 } 
    private function writeFile():void 
    { 
        var todoFile:File = File.applicationStorageDirectory.resolvePath("todo.txt"); 


            var fs:FileStream = new FileStream(); 
            fs.open(todoFile, FileMode.APPEND); 


            fs.writeUTFBytes(task_txt.text + "\n"); 


            fs.close(); 
            readFile(); 
    } 
    private function deleteFile():void 
    { 
        //????????????? HEEEEELP         !!!!!!!!!! 
    } 

]]> 
</fx:Script> 


<s:List id="todo_list" left="10" right="10" top="146" bottom="87"       dataProvider="{todo_items}"/> 
<s:Button left="11" right="10" top="69" height="65" label="Save task" click="writeFile()" 
          enabled="{task_txt.text.length > 0}"/> 
<s:TextInput id="task_txt" left="10" right="10" top="10" height="51" prompt="Specify a task"/> 
<s:Button left="10" right="10" bottom="14" label="Delete" 
          click="todo_items.removeItemAt(todo_list.selectedIndex); deleteFile()" 
                        enabled="{todo_list.selectedIndex != -1}"/> 

4

2 回答 2

0

你想做的是

  1. 从文件中读取所有数据,就像 readFile 正在做的那样。
  2. 从该数据中删除您要删除的任何行。
  3. 将数据写回文件 - 就像 writeFile 正在做的那样 - 在FileMode.WRITE模式下,因为您希望它覆盖,而不是追加。

如果您不能完全弄清楚这一点并且需要代码而不是指南,请随时在此处发表评论,我将为您提供的不仅仅是指针。


readFile 中的代码(全部)将文件中的数据读入名为 的 ArrayCollectiontodo_items中。

如果你想从文件中删除一个项目,你想从那个 ArrayCollection 中删除它(类似于todo_items.removeItemAt(index))。

现在,您有一个 ArrayCollection,其中包含您想要在文件中的数据。此时,您需要模仿 writeFile() 的操作,但使用 FileMode.WRITE,并且您想要写出列表中的每一项,而不是要添加的文本框中的一项。

private function deleteFile():void 
{ 
    var todoFile:File = File.applicationStorageDirectory.resolvePath("todo.txt"); 


        var fs:FileStream = new FileStream(); 
        fs.open(todoFile, FileMode.WRITE); 

        for(var item:String in todo_items)
        {
            fs.writeUTFBytes(item + "\n")
        }

        fs.close(); 
        readFile(); 
} 

On a somewhat related note - I don't think 'deleteFile' is a good name for what you are doing here. You might want a deleteItem() method that deletes the selected item, and then a saveFile() method that contains the code above.

于 2012-07-23T14:27:04.803 回答
-1

我认为 deleteFile 方法旨在删除文件?如果是这样,Adobe 的参考文档记录了File 类和删除,这通常是探索类时开始的好地方。

private function deleteFile():void 
{ 
       var todoFile:File = File.applicationStorageDirectory.resolvePath("todo.txt"); 
       todoFile.deleteFile()
} 
于 2012-07-23T14:21:27.180 回答