Classic ASP のサーバー側 Javascript を使用して、すべてのサブフォルダーを文字区切りの文字列「リスト」に再帰的に取得しようとしています。トリックを行うはずの私の関数は次のとおりです。
function hasContent(text) {
if (text == undefined) {
return false;
} else if (text === undefined) {
return false;
} else if (text == "undefined") {
return false;
} else if (text === "undefined") {
return false;
} else if (typeof text == "undefined") {
return false;
} else if (text == null) {
return false;
} else if (text === null) {
return false;
} else if (text == "") {
return false;
} else if (text === "") {
return false;
} else {
return true;
}
}
function generateActualPath(path) {
try {
if (!hasContent(path)) {
return "./";
}
if (!/.+[\\/\\\\]$/.test(path)) {
path += "/";
}
if (!/^\\./.test(path)) {
path = "." + path;
}
return path;
} catch (e) {
return "./";
}
}
function retrieveDirectories(dir) {
try {
var actualPath = '/' + dir;
var obj = Server.CreateObject("Scripting.FileSystemObject");
dirs = obj.GetFolder(Server.MapPath(generateActualPath(actualPath)));
for (var enumm = new Enumerator(dirs.subFolders); !enumm.atEnd(); enumm.moveNext()) {
if (/^[a-zA-Z0-9\-_&%#]/.test(enumm.item().Name) && enumm.item().Name.trim().indexOf('_') != 0) {
if (hasContent(Session("directories"))) {
Session("directories") += enumm.item().Name + '|';
} else {
Session("directories") = enumm.item().Name + '|';
}
retrieveDirectories(enumm.item().Name);
}
}
} catch (e) {}
}
ただし、再帰呼び出しにもかかわらず、「dir」の最初のレベルのサブフォルダーしか表示されず、それ以上は表示されません。ここで何が欠けているのでしょうか? 「dir」には、「_」で始まらず、顧客の要件ごとに正当な英数字を含む最大 4 つのサブレベルのサブディレクトリがあることを確認しました。