¿Cuál es la forma correcta de crear de manera segura un directorio temporal en Haskell? System.IO
ofrece formas de crear archivos temporales , pero no puedo encontrar nada que haga lo mismo para los directorios, ni allí ni en System.Directory
, System.Posix.Directory
ni System.Posix.Temp
. ¿Hay alguna función que pase por alto o debo escribir una? (? Y si es así, ¿existen peligros para evitar, como hay con la creación de archivos temporales)Crear un directorio temporal en Haskell
Respuesta
Para el trabajo específico con los sistemas Unix, el paquete Unixutils contiene una función de este tipo:
withTemporaryDirectory :: FilePath -> (FilePath -> IO a) -> IO a
Si necesita que funcione tanto en sistemas Windows como Unix; en su lugar, querrá usar el paquete temporal. Tiene la misma función con una firma de tipo ligeramente diferente:
withTemporaryDirectory :: FilePath -> String -> (FilePath -> IO a) -> IO a
Se podría buscar en el módulo Distribution.Compat.TempFile
de la fuente de Cabal para un ejemplo. En él se definen de la siguiente manera createTempDirectory
(donde c_getpid
y mkPrivateDir
son específicos de la plataforma):
createTempDirectory :: FilePath -> String -> IO FilePath
createTempDirectory dir template = do
pid <- c_getpid
findTempName pid
where
findTempName x = do
let dirpath = dir </> template ++ show x
r <- try $ mkPrivateDir dirpath
case r of
Right _ -> return dirpath
Left e | isAlreadyExistsError e -> findTempName (x+1)
| otherwise -> ioError e
El hecho de que Cabal define esta función sugiere que no hay una forma estándar de hacerlo.
Esta funcionalidad ahora se ha incluido en el paquete ['temporary'] (http://hackage.haskell.org/package/temporary). – bgamari
Como sugiere @Nikita Volkov, Estoy publicar el comentario del @Thomas M. Dubuisson como una respuesta por separado:
utilizar el paquete temporary. Proporciona una conveniente API independiente de la plataforma para usar archivos y directorios temporales. Los archivos y directorios temporales se eliminan automáticamente después de su uso.
- 1. ¿Cómo crear un directorio temporal en C++?
- 2. ¿Cómo crear un directorio temporal en hormiga?
- 3. ¿Se puede crear el archivo temporal de flymake en el directorio temporal del sistema?
- 4. Creando un directorio temporal único de C puro en Windows
- 5. ¿Cómo puedo crear automáticamente (y eliminar) un directorio temporal en un Makefile?
- 6. Cómo crear un directorio temporal y recibe el nombre de ruta/archivo en Python
- 7. Crear tabla temporal en Hive?
- 8. Operación temporal en un directorio temporal en el script de shell
- 9. Contenido del directorio en Haskell
- 10. Crear vista temporal desde una tabla temporal en SQL Server
- 11. iOS: ¿Cuál es una forma segura de crear un directorio temporal?
- 12. Haskell ¿Cómo crear un Word8?
- 13. ¿Cómo crear un std :: ofstream en un archivo temporal?
- 14. ¿Cómo crear un archivo temporal (para escribir en) en C#?
- 15. Acceso denegado al directorio temporal de ASP.NET
- 16. Crear una tabla temporal en PL/SQL
- 17. Deshabilitar el directorio temporal de MSTest en TeamCity
- 18. Lisp común: crear un directorio
- 19. Crear un archivo temporal sin abrirlo en Ruby
- 20. ¿Cómo crear un archivo de texto temporal en C++?
- 21. ¿Cómo crear un directorio en wix?
- 22. ¿Cómo crear recursivamente un directorio en Qt?
- 23. Crear un directorio de administración en Rails
- 24. ¿Cómo crear un directorio en Lua?
- 25. Inicio de sesión en el directorio temporal de manera multiplataforma
- 26. El directorio temporal persiste en todas las ejecuciones de programas
- 27. Carrierwave directorio temporal establecido en la carpeta uploads/tmp
- 28. ¿Cómo guardar imágenes y archivos grabados en el directorio temporal?
- 29. Cómo crear un enlace a un directorio
- 30. Crear archivo temporal y eliminar automáticamente
Esto devuelve el directorio donde se crearán los nuevos archivos temporales (es decir, generalmente "/ tmp"). En realidad, no crea un directorio temporal. –
@Travis ACK! withTemporaryDirectory era lo que estaba buscando. –
Esto encaja muy bien con el uso que tenía en mente, ya que automatiza la limpieza del directorio cuando lo he terminado. –