es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo prevenir que la aplicación cree carpetas del sistema de Windows utilizando expresiones regulares?

Estoy construyendo una aplicación basada en navegador que permite a los usuarios crear carpetas con algunos archivos .json (no es gran cosa). El problema es que el marco que estoy usando (NW.js) parece no preocuparse por permitir a los usuarios crear carpetas con nombres “CON” o “NUL”. No se supone que se creen, los archivos dentro simplemente desaparecen y es algo complicado eliminar las carpetas en sí mismas.

No tengo ningún problema para hacer algo como esto para evitar que suceda:

var newFolder = "nul";
function checkFolderName(text) {
    switch(newFolder) {
    case "con":
        console.log("no se puede crear la carpeta")
        break;

case "nul":
    console.log("no se puede crear la carpeta")
    break;

// y así sucesivamente... encontré alrededor de 23 nombres reservados de Windows

default:
    console.log("se puede crear la carpeta")
}
}}
checkFolderName(newFolder);

Pero me pregunto si hay alguna manera más fácil de verificar esto a través de Regex/JavaScript, o tal vez algún enfoque diferente para esta idea.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en JavaScript y en el directorio de Windows, hay un par de formas en las que podrías abordar este problema.

    Una solución podría ser usar expresiones regulares para comprobar si el nombre de la carpeta coincide con alguno de los nombres reservados. Aquí tienes una función de ejemplo que utiliza regex para verificar si el nombre de la carpeta coincide con alguno de los 23 nombres reservados:

    function isReservedFolderName(folderName) {
      var reservedNames = /(con|prn|aux|nul|com[0-9]|lpt[0-9])/i;
      return reservedNames.test(folderName);
    }
    

    Luego puedes usar esta función para verificar si el nombre de la carpeta está reservado e informar al usuario en consecuencia.

    Otro enfoque podría ser usar la API de Windows para verificar si el nombre de la carpeta es un nombre reservado. Aquí tienes una función de ejemplo que utiliza la API de Windows para verificar si el nombre de la carpeta está reservado:

    function isReservedFolderName(folderName) {
      var shell = new ActiveXObject('Shell.Application');
      var folder = shell.Namespace(0).ParseName(folderName);
      var isReserved = false;
      for (var i = 0; i < 23; i++) {
        if (folder.Verbs().Item(i).Name.indexOf('Delete') >= 0) {
          isReserved = true;
          break;
        }
      }
      return isReserved;
    }
    

    Esta función utiliza el objeto Shell.Application para crear un objeto Folder y luego comprueba si alguno de los 23 nombres reservados puede ser eliminado. Si pueden ser eliminados, significa que son nombres reservados.

    Ambos enfoques pueden usarse para evitar que los usuarios creen carpetas con nombres reservados como CON o NUL.

Comments are closed.