Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用文件连接删除SD卡中的文件--Blackberry_Blackberry - Fatal编程技术网

无法使用文件连接删除SD卡中的文件--Blackberry

无法使用文件连接删除SD卡中的文件--Blackberry,blackberry,Blackberry,我已经开发了一个黑莓应用程序,其中我有视频控制来捕获图像,然后我将图像保存在根目录中,以我想要的名称显示屏幕。。。在“重新捕获”按钮中,单击“我再次捕获图像”,然后删除以前的图像,并使用文件连接将新图像以相同的名称保存在相同的路径中。我的问题是它在emulator中工作得很好。但当我在设备中测试时,当我试图删除以前的图像以保存新图像时,它会抛出错误。。它抛出“net.rim.device.api.io.file.fileioexception:该文件当前正在使用”。。请帮帮我 @阿希米德,@j

我已经开发了一个黑莓应用程序,其中我有视频控制来捕获图像,然后我将图像保存在根目录中,以我想要的名称显示屏幕。。。在“重新捕获”按钮中,单击“我再次捕获图像”,然后删除以前的图像,并使用文件连接将新图像以相同的名称保存在相同的路径中。我的问题是它在emulator中工作得很好。但当我在设备中测试时,当我试图删除以前的图像以保存新图像时,它会抛出错误。。它抛出“net.rim.device.api.io.file.fileioexception:该文件当前正在使用”。。请帮帮我


@阿希米德,@juanmabaiu 这是在设备中测试时,它用来捕获并抛出异常的函数

 public void fieldChanged( final byte[] _raw )
{
    try
    {    
        flag ++;
        // Create the connection to a file that may or
        // may not exist.
        FileConnection file = (FileConnection)Connector.open(FILE_NAME + "_front" + EXTENSION);

        // If the file exists, increment the counter until we find
        // one that hasn't been created yet.
        while( file.exists() )
        {
            file.delete();
            file = (FileConnection)Connector.open( FILE_NAME + "_front" + EXTENSION );
        }          

        //FileConnection file_temp = (FileConnection)Connector.open(FILE_NAME + "tempimg" + EXTENSION);
        //file_temp.delete();
        // We know the file doesn't exist yet, so create it
        file.create();

        // Write the image to the file
        OutputStream out = file.openOutputStream();
        out.write(_raw);

        // Close the connections
        out.close();
        file.close();
        //Dialog.inform( "Saved to " + FILE_NAME + "_front" + EXTENSION );
    }
    catch(Exception e)
    {
        home.errorDialog("ERROR " + e.getClass() + ":  " + e.getMessage());
        Dialog.inform( "File not saved this time");
    }        
}

这段代码很臭:

while( file.exists() )
{
    file.delete();
    file = (FileConnection)Connector.open( FILE_NAME + "_front" + EXTENSION );
}
事实上,如果文件存在,则删除它,但忘记了刚刚删除的文件的
FileConnection
实例。我想这可能就是原因。您需要立即关闭
文件连接
实例。下面是关于这一点的说明:

类似地,可以使用FileConnection.delete()方法删除文件或目录,开发人员应在删除后立即关闭连接,以防止异常访问到不存在的文件或目录的连接

因此,请尝试使用以下方法:

if (file.exists()) {
    file.delete();
    file.close();
    file = (FileConnection) Connector.open(FILE_NAME + "_front" + EXTENSION);
}

需要强调的另一点是,代码非常自信/乐观,它不能正确处理极端情况。例如,如果
out.write(_raw)怎么办失败的原因是什么(例如,没有可用空间)?FileConnection和OutputStream是否将关闭?不需要。因此,您需要添加一个
最后
块,确保您实际上没有留下任何打开的内容。

我也面临这个问题,但当我尝试将图像保存在设备内存而不是SD卡上时。以下代码可以删除图像:

if (file.exists()) {
    file.delete();
    file.close();
}

确保在保存或删除文件后关闭了所有流。试试Arhimed在上述评论中所说的。如果无法修复,请添加一些代码。嗨,arhimed和juanmabaiu。。代码方面一切都很好。。它在模拟器中工作得很好。仅在设备中测试时显示错误..感谢您的回复。我已经试过你说的了。但我仍然面临着同样的问题。某些东西确实包含了该文件的系统资源。试着弄清楚到底是什么做的。上面的if循环在模拟器中也能很好地工作,并在设备中抛出异常。。如果你愿意,我可以把我的全部代码寄给你。你能帮我解决这个问题吗?对不起,伙计,不幸的是我无法处理你的电子邮件请求。