FSO (File System Object) Ordner in sich kopieren Fehler erkennen

gianfranco0104

Erfahrenes Mitglied
Hi, habe folgendes Problem. Kennt jeder, einen Ordner kann man nicht in sich selbst verschieben. Mit dem FSO lässt sich das schon erstmal starten, doch dann gibt es eine Fehlermeldung, was soweit ja OK ist. Nur, wie kann ich diesen Fehler erkennen, sodass ich einen Alert ausgeben könnte, wie z.B. auch bei FolderExists:
Javascript:
  if (fso.FolderExists("C:\\Temp\\myFolder")) { 
  document.write("myFolder exists."); 
  } 
  else { 
  document.write("myFolder does not exist."); 
  }

Schieben OK wäre
Javascript:
  fso.MoveFolder("C:\\Temp\\folder1", "C:\\Temp\\folder2\\ABC");

Fehler anzeigen bei
Javascript:
  fso.MoveFolder("C:\\Temp\\folder1", "C:\\Temp\\folder1\\ABC");

In der Debugging Console wird der Fehler ja erkannt, den muss man doch auch irgendwie rausholen können?
 
Hallo,

Möglichkeit 1:
Per JS den Pfad parsen und so vergleichen.

Möglichkeit 2:
Den Fehler mit einem try-catch-Block abfangen. Das Unsaubere hier dran ist allerdings, dass du jeden Fehler abfängst, da es (noch*)keine Möglichkeit gibt, sich auf einen Fehlertyp zu beschränken.

*) Firefox hat mal eine experimentelle API in dieser Richtung, siehe https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch. Das ist aber kein offizieller Standard und dein Programm setzt sowieso IE voraus.
 
Meinst du etwas so?
Javascript:
<p id="test"></p>

<script>
try {
    adddlert("Hallo!"); //bewusster fehler
}
catch(err) {
    document.getElementById("test").innerHTML = err.message;
}
</script>

und dann die Errormessage abgleichen und daraus einen eigenen (übersetzten, für Anwender verständlichen) Fehlertext erzeugen. Müsste doch so gehen?
Allerdings bezieht sich das ja auf TRY. ist also eher für das debuggen gut....
 
Zuletzt bearbeitet:
Ja, ungefährt so meinte ich es.
Wobei das Error-Objekt immer vom Code, der die Exception wirft, abhängt.
Du kannst auch ganz normale Strings als Exceptions nutzen.

In der Debugging Console wird der Fehler ja erkannt, den muss man doch auch irgendwie rausholen können?
Daraus habe ich (zu voreilig?) geschlussfolgert, dass eine normale Exception geworfen wird, die du auch abfangen kannst. Probier mal den fehlerhaften Aufruf von MoveFolder in eine try-Klausel zu verschieben und den Fehler per catch abzufangen und auszugeben.
 
Hm, egal, wo ich meinen Try setze, bekomme ich vom Editor bereits eine Fehlermeldung.

Wo kann ich denn die Try-Klausel einsetzen, ohne einen Syntax Fehler zu bekommen?

Javascript:
  var fsoCopyPaste = new ActiveXObject("Scripting.FileSystemObject");
  function pasteFiles(){
           
      //Paste geklickt?
      $("#the_charmbar_dwn_expl_paste").click(function() {
       
       
        //Paste Funktion
        if (CHMpaste === true) {
           
            if (fsoCopyPaste.FolderExists(pasteHere + "\\" + fldrName)) {
                document.getElementById('folderExistsHEAD').innerHTML  = fldrName;
                document.getElementById('folderExistsTXT').innerHTML  = fldrName;
                MM_DW_effectFade($('#OverwriteFolder_YESno'),'show','fade',200);
            } else {
                    fsoCopyPaste.CreateFolder(pasteHere + "\\" + fldrName);
                    fsoCopyPaste.CopyFolder(chsdFolder, pasteHere + "\\" + fldrName, 1);    //1 = überschreibt vorhandene Dateien und upgradet vorh. Ordner, 0= nicht überschr.
                    // fall CUT statt copy
                    if (fCut === true) { fsoCopyPaste.DeleteFolder(chsdFolder, true); }   
                    //neu anzeigen
                    document.frmSearch.txtPath.value = pasteHere  ;
                    resetCharmbar();
               }; 
        };       
      });
      TabHold = false;
     
  }
 
Schau mal, ob folgender Code funktioniert, wenn du die Ordner falsch angibst:
Javascript:
var fsoCopyPaste = new ActiveXObject("Scripting.FileSystemObject");
  function pasteFiles(){
      
    //Paste geklickt?
    $("#the_charmbar_dwn_expl_paste").click(function() {
    
    
    //Paste Funktion
    if (CHMpaste === true) {
      
      if (fsoCopyPaste.FolderExists(pasteHere + "\\" + fldrName)) {
        document.getElementById('folderExistsHEAD').innerHTML  = fldrName;
        document.getElementById('folderExistsTXT').innerHTML  = fldrName;
        MM_DW_effectFade($('#OverwriteFolder_YESno'),'show','fade',200);
      } else {
          fsoCopyPaste.CreateFolder(pasteHere + "\\" + fldrName);
          try {
            fsoCopyPaste.CopyFolder(chsdFolder, pasteHere + "\\" + fldrName, 1);  //1 = überschreibt vorhandene Dateien und upgradet vorh. Ordner, 0= nicht überschr.
          }
          catch {
            alert('Fehler fand statt!');
          }
          // fall CUT statt copy
          if (fCut === true) { fsoCopyPaste.DeleteFolder(chsdFolder, true); }  
          //neu anzeigen
          document.frmSearch.txtPath.value = pasteHere  ;
          resetCharmbar();
         };
    };    
    });
    TabHold = false;
  
  }
(Ich ging davon aus, dass CopyFolder den Fehler, den du abfangen willst, erzeugst.)
 

Neue Beiträge

Zurück