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 detectar archivos ocultos en una carpeta en Go: aproximación multiplataforma

Estoy iterando a través de una carpeta montada utilizando el método filePath.Walk en golang, pero también devuelve los archivos ocultos. Tengo que omitir esos archivos ocultos.
Para MaxOS y Linux, podemos detectar un archivo oculto mediante el prefijo “.” en el nombre de archivo, pero para Windows, cuando intento usar este método GetFileAttributes, proporcionado por “syscall”, no detecta estos métodos y genera un error.

Uso el siguiente método para obtener el archivo:

err := filepath.Walk(prefix, func(docPath string, f os.FileInfo, err error) error {

A continuación, se muestra cómo estoy intentando detectar los archivos ocultos:

import (
“runtime”
“syscall”
)

func IsHiddenFile(filename string) (bool, error) {

if runtime.GOOS == “windows” {
pointer, err := syscall.UTF16PtrFromString(filename)
if err != nil {
return false, err
}
attributes, err := syscall.GetFileAttributes(pointer)
if err != nil {
return false, err
}
return attributes&syscall.FILE_ATTRIBUTE_HIDDEN != 0, nil
} else {
// un archivo o directorio de Unix/Linux que comienza con . está oculto
if filename[0:1] == “.” {
return true, nil
}
}
return false, nil
}

Error:

/ indefinido: syscall.UTF16PtrFromString
/ indefinido: syscall.GetFileAttributes
/ indefinido: syscall.FILE_ATTRIBUTE_HIDDEN

Agregué esto // +build windows al inicio del archivo antes del nombre del paquete como se sugiere aquí: https://stackoverflow.com/questions/27361715/syscall-variables-undefined pero aún no funciona y genera el mismo error.

Necesito saber si Go proporciona algún método común para detectar si un archivo está oculto o no. ¿O hay alguna forma de obtener todos los archivos/carpetas en algún directorio montado sin recibir archivos ocultos en primer lugar?

Realmente espero recibir algunos comentarios aquí, gracias.

EDITAR: Solucioné el problema mencionado anteriormente (consulte los comentarios a continuación), también quiero saber cómo podemos detectar el archivo oculto cuando estamos conectados con el servidor remoto (SMB), el sistema remoto podría estar ejecutando cualquier sistema operativo y compilamos estos métodos basándonos en el sistema en el que se está ejecutando. ¿Cómo podemos detectar archivos ocultos en ese escenario?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para detectar archivos ocultos en un servidor remoto a través de SMB, puedes utilizar el siguiente enfoque:

    • Establecer una conexión al servidor remoto utilizando la biblioteca de protocolo adecuada (como Samba o SMB).
    • Utilizar el método ListFiles u otro similar proporcionado por la biblioteca para obtener todos los archivos y carpetas en el directorio montado.
    • Para cada archivo o carpeta, verificar si está oculto utilizando los métodos mencionados en la respuesta anterior, es decir, GetFileAttributes para Windows y revisando el prefijo del nombre de archivo en Linux y macOS.
    • Si el archivo está oculto, omítelo y pasa al siguiente archivo/carpeta.

    Ten en cuenta que los detalles exactos de implementación dependerán de la biblioteca de protocolo y el sistema operativo del servidor remoto. Es posible que necesites utilizar métodos diferentes para diferentes sistemas operativos o incluso para diferentes versiones del mismo sistema operativo.

Comments are closed.