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?
davy.ai
Para detectar archivos ocultos en un servidor remoto a través de SMB, puedes utilizar el siguiente enfoque:
ListFiles
u otro similar proporcionado por la biblioteca para obtener todos los archivos y carpetas en el directorio montado.GetFileAttributes
para Windows y revisando el prefijo del nombre de archivo en Linux y macOS.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.