fileio: deletefile can delete multiple files at once. 56/17956/3
Clément DAVID [Wed, 23 Mar 2016 06:27:24 +0000 (07:27 +0100)]
Change-Id: Ida0443b47099017e6297e41a2c78caddd56844eb

scilab/CHANGES
scilab/modules/fileio/help/en_US/deletefile.xml
scilab/modules/fileio/sci_gateway/cpp/sci_deletefile.cpp
scilab/modules/fileio/tests/unit_tests/deletefile.dia.ref
scilab/modules/fileio/tests/unit_tests/deletefile.tst

index d95a75c..33d1578 100644 (file)
@@ -113,6 +113,8 @@ Other feature additions
 
 * sleep(..,'s') allows now to specify the duration in seconds.
 
+* deletefile can delete multiple files at once.
+
 
 Installation
 ============
index eae7b1e..b8e84a4 100644 (file)
@@ -21,7 +21,7 @@
     </refnamediv>
     <refsynopsisdiv>
         <title>Syntax</title>
-        <synopsis>f = deletefile(filename)</synopsis>
+        <synopsis>status = deletefile(filename)</synopsis>
     </refsynopsisdiv>
     <refsection>
         <title>Arguments</title>
             <varlistentry>
                 <term>filename</term>
                 <listitem>
-                    <para>a string: a file name existing or not.</para>
+                    <para>character strings interpreted as existing file names or not.</para>
                 </listitem>
             </varlistentry>
             <varlistentry>
-                <term>f</term>
+                <term>status</term>
                 <listitem>
                     <para>
-                        a boolean: <constant>%t</constant> or <constant>%f</constant>.
+                        booleans <constant>%t</constant> on success or <constant>%f</constant> on error. It has the same size as <varname>filename</varname>.
                     </para>
                 </listitem>
             </varlistentry>
@@ -60,6 +60,17 @@ deletefile(TMPDIR+'/filetodelete.txt')
 end
 
 deletefile(TMPDIR+'/notexistingfile')
+
+deletefile(TMPDIR+['/notexistingfile' '/notexistingsecondfile'])
     ]]></programlisting>
     </refsection>
+    <refsection>
+        <title>History</title>
+        <revhistory>
+            <revision>
+                <revnumber>6.0.0</revnumber>
+                <revremark>Manage multi-dimensionnal arguments to remove multiple files at once.</revremark>
+            </revision>
+        </revhistory>
+    </refsection>
 </refentry>
index b487cfe..6996ae5 100644 (file)
@@ -2,6 +2,7 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2007 - INRIA - Allan CORNET
  * Copyright (C) 2010 - INRIA - Antoine ELIAS
+ * Copyright (C) 2016 - Scilab Enterprises - Clement DAVID
  *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
@@ -36,56 +37,20 @@ types::Function::ReturnValue sci_deletefile(types::typed_list &in, int _iRetCoun
         return types::Function::Error;
     }
 
-    if (in[0]->isString() == false || in[0]->getAs<types::String>()->getSize() != 1)
+    if (in[0]->isString() == false)
     {
         Scierror(999, _("%s: Wrong type for input argument #%d: A String expected.\n"), "deletefile", 1);
         return types::Function::Error;
     }
 
-
-    types::Bool *pOut = NULL;
-    if (deleteafileW(in[0]->getAs<types::String>()->get(0)))
-    {
-        pOut = new types::Bool(1);
-    }
-    else
+    auto pIn = in[0]->getAs<types::String>();
+    types::Bool *pOut = new types::Bool(pIn->getDims(), pIn->getDimsArray());
+    for (int i = 0; i < pIn->getSize(); i++)
     {
-        pOut = new types::Bool(0);
+        pOut->set(i, deleteafileW(pIn->get(i)));
     }
 
     out.push_back(pOut);
     return types::Function::OK;
-    //CheckRhs(1,1);
-    //CheckLhs(1,1);
-
-    //if (GetType(1) == sci_strings)
-    //{
-    // int m1,n1,l1;
-    // char *VarName=NULL;
-
-    // GetRhsVar(1,STRING_DATATYPE,&m1,&n1,&l1);
-    // /* Bug 3089 */
-    // VarName = cstk(l1);
-
-    // n1=1;
-    // if ( deleteafile(VarName) )
-    // {
-    //         CreateVar(Rhs+1,MATRIX_OF_BOOLEAN_DATATYPE, &n1,&n1,&l1);
-    //         *istk(l1)=(int)(TRUE);
-    // }
-    // else
-    // {
-    //         CreateVar(Rhs+1,MATRIX_OF_BOOLEAN_DATATYPE, &n1,&n1,&l1);
-    //         *istk(l1)=(int)(FALSE);
-    // }
-
-    // LhsVar(1)=Rhs+1;
-    // C2F(putlhsvar)();
-    //}
-    //else
-    //{
-    // Scierror(999,_("%s: Wrong type for input argument: string expected.\n"),fname);
-    //}
-    //return 0;
 }
 /*--------------------------------------------------------------------------*/
index 9a48c0c..fd1d4ec 100644 (file)
@@ -1,26 +1,46 @@
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2009 - DIGITEO
+// Copyright (C) 2016 - Scilab Enterprises - Clement David
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
 // <-- CLI SHELL MODE -->
 filename = pathconvert(TMPDIR+"/filetodelete_1.txt",%F);
-// First test-case : Regular use
+filename2 = pathconvert(TMPDIR+"/filetodelete_2.txt",%F);
+// Regular use
 fd=mopen ( filename , "w" );
 mclose(fd);
 computed = deletefile ( filename );
 if computed <> %t then bugmes();quit;end
-// Second test-case : Wrong use then correct use
-if getos() == 'Windows' then
-       fd=mopen ( filename , "w" );
-       computed = deletefile ( filename );
-       if computed <> %f then bugmes();quit;end
-       mclose(fd); 
-       computed = deletefile ( filename );
-       if computed <> %t then bugmes();quit;end
+// Wrong use then correct use
+// NOTE: windows file API failed to remove an opened file
+if getos() == "Windows" then
+    fd=mopen ( filename , "w" );
+    computed = deletefile ( filename );
+    if computed <> %f then bugmes();quit;end
+    mclose(fd);
+    computed = deletefile ( filename );
+    if computed <> %t then bugmes();quit;end
 end
-// Third test-case : try to delete a non-existing file
+// try to delete a non-existing file
 filename = pathconvert(TMPDIR+"/filetodelete_2.txt",%F);
 computed = deletefile ( filename );
 if computed <> %f then bugmes();quit;end
+// try to delete two files
+fd=mopen ( filename , "w" );
+mclose(fd);
+fd=mopen ( filename2 , "w" );
+mclose(fd);
+computed = deletefile ( [filename filename2] );
+if computed <> [%t %t] then bugmes();quit;end
+// try to delete twice the same file
+fd=mopen ( filename , "w" );
+mclose(fd);
+computed = deletefile ( [filename filename] );
+if computed <> [%t %f] then bugmes();quit;end
+// try to delete the same file on a matrix
+fd=mopen ( filename , "w" );
+mclose(fd);
+computed = deletefile ( [filename2 filename ; filename2 filename]);
+if computed <> [%f %t ; %f %f] then bugmes();quit;end
index 55fb744..72377c8 100644 (file)
@@ -1,6 +1,7 @@
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2009 - DIGITEO
+// Copyright (C) 2016 - Scilab Enterprises - Clement David
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
 
 
 filename = pathconvert(TMPDIR+"/filetodelete_1.txt",%F);
+filename2 = pathconvert(TMPDIR+"/filetodelete_2.txt",%F);
 
-// First test-case : Regular use
+// Regular use
 fd=mopen ( filename , "w" );
-mclose(fd); 
+mclose(fd);
 computed = deletefile ( filename );
 if computed <> %t then pause,end
 
-// Second test-case : Wrong use then correct use
-if getos() == 'Windows' then
-       fd=mopen ( filename , "w" );
-       computed = deletefile ( filename );
-       if computed <> %f then pause,end
-       mclose(fd); 
-       computed = deletefile ( filename );
-       if computed <> %t then pause,end
+// Wrong use then correct use
+// NOTE: windows file API failed to remove an opened file
+if getos() == "Windows" then
+    fd=mopen ( filename , "w" );
+    computed = deletefile ( filename );
+    if computed <> %f then pause,end
+    mclose(fd);
+    computed = deletefile ( filename );
+    if computed <> %t then pause,end
 end
 
-// Third test-case : try to delete a non-existing file
+// try to delete a non-existing file
 filename = pathconvert(TMPDIR+"/filetodelete_2.txt",%F);
 computed = deletefile ( filename );
 if computed <> %f then pause,end
+
+// try to delete two files
+fd=mopen ( filename , "w" );
+mclose(fd);
+fd=mopen ( filename2 , "w" );
+mclose(fd);
+computed = deletefile ( [filename filename2] );
+if computed <> [%t %t] then pause,end
+
+// try to delete twice the same file
+fd=mopen ( filename , "w" );
+mclose(fd);
+computed = deletefile ( [filename filename] );
+if computed <> [%t %f] then pause,end
+
+// try to delete the same file on a matrix
+fd=mopen ( filename , "w" );
+mclose(fd);
+computed = deletefile ( [filename2 filename ; filename2 filename]);
+if computed <> [%f %t ; %f %f] then pause,end
+