Frage zu Rekursives Ordner kopieren

  • 5 Antworten
  • Neuester Beitrag
Diskutiere Frage zu Rekursives Ordner kopieren im Android App Entwicklung im Bereich Betriebssysteme & Apps.
kukuk

kukuk

App-Anbieter (kostenlos)
Ich kopiere einen Ordner rekursiv und lasse in einem Dialog die zu konvertierenden Dateien anzeigen. Jetzt habe ich das Problem, dass ich nicht weiß, wie ich überprüfen kann ob der Vorgang abgeschlosssen ist. Kann mir da jemand weiterhelfen?
Ich habe schon mit AsyncTask u.s.w ausprobiert, damit funktioniert es nicht, da er nach dem ersten Durchlauf denkt er sei fertig obwohl im Hintergrund sich die Funktion wieder gestartet hat.

Code:
    public void copyDirectoryOneLocationToAnotherLocation(File sourceLocation, File targetLocation)
            throws IOException {

        if (sourceLocation.isDirectory()) {
            if (!targetLocation.exists()) {
                targetLocation.mkdir();
            }

            String[] children = sourceLocation.list();
            for (int i = 0; i < sourceLocation.listFiles().length; i++) {
try {


    getActivity().runOnUiThread(new Runnable() {
        @Override
        public void run() {

            update_file_system_verzeichnis_txt.setText("Konvertiere:\n" + sourceLocation.toString());
//    update_file_system_verzeichnis_txt.setText("Konvertiere:\n" + sourceLocation.toString().substring(cut, sourceLocation.toString().length()));


        }
    });


}catch (Exception e){

}
                copyDirectoryOneLocationToAnotherLocation(new File(sourceLocation, children[i]),
                        new File(targetLocation, children[i]));
            }
        } else {

            InputStream in = new FileInputStream(sourceLocation);

            OutputStream out = new FileOutputStream(targetLocation);

            // Copy the bits from instream to outstream
            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            in.close();
            out.close();
        }


    }
 
swa00

swa00

Moderator
Teammitglied
Moin Kukuk,

also das Ganze MUSS in einen Thread - (z.b. AsynTask) hinein.
Und damit du weisst , wann es fertig wird, fängt man das Ganze dann im PostExecute ab und zur Sicherheit würde ich dann
noch einen simplen CRC32 einbauen.

Durchlauf denkt er sei fertig obwohl im Hintergrund sich die Funktion wieder gestartet hat.
... und das habe ich nicht verstanden :)
 
Zuletzt bearbeitet:
kukuk

kukuk

App-Anbieter (kostenlos)
Hallo swa00, die Funktion ruft sich ja selber wieder auf. Wenn beim ersten durchlauf allerdings der Ordner kopiert wurde, ist die Funktion ja für den Tasker "abgearbeitet". Das ist das Problem.
 
swa00

swa00

Moderator
Teammitglied
Du musst bitte genau erklären , warum du einen mehrfachen Kopiervorgang benötigst .
Ich habe den Sinn deiner Sache noch nicht ganz inne .....

Du hast X Dateien , die sollen von A nach B kopiert werden. soweit so gut und dann ???
 
markus.tullius

markus.tullius

Experte
Soweit ich es sehe, hat die Methode zwei Aufgaben, Dateien zu finden und zu kopieren. Das heißt, du könntest es auch in zwei Schritte aufteilen.

Zuerst durchsuchst die App den Ordner rekursiv und speicherst die Pfade der Dateien, die kopiert werden sollen, in einer Liste. Danach gehst die App die Liste schrittweise durch. und kopierst die Dateien.
 
kukuk

kukuk

App-Anbieter (kostenlos)
Genau ich kopiere einen Ordner von A nach B. Während des kopier Vorgangs zeige ich einen Dialog an, der den aktuellen Ordner anzeigt, der gerade kopiert wird. Das funktioniert auch alles ordnungsgemäß. Jedoch kann ich so nicht feststellen wann der Vorgang abgeschlossen wurden.
Zudem kommt hinzu, das der Ordner noch mehrere Unterordner hat. Die Idee mit der Liste könnte ich mal versuchen.


*EDIT* ich habe jetzt eine Stelle gefunden, an der ich den Dialog einfach schließen kann....... Es funktioniert. Juhu.
 
Zuletzt bearbeitet:
Ähnliche Themen - Frage zu Rekursives Ordner kopieren Antworten Datum
0
5
2