Jump to content

Problema com runCommand + writeFile


punkzero
 Share

Recommended Posts

boas, desta vez tenho uma problema relacionado com a verificação da existência de pastas para poder gravar certos ficheiros, eu tenho este código (exemplo):

import System.Directory
import System.IO
import System.Process

ex :: IO ()
ex = do x <- doesDirectoryExist "./teste"
              if (x) then do writeFile "./teste/ola.txt" "ola"
                                     putStrLn "ola.txt criado"
                      else do runCommand "mkdir ./teste/"
                                    writeFile "./teste/ola.txt" "ola"
                                    putStrLn "ola.txt criado"

mas o problema é este correndo o programa (vindo do princípio que a pasta ainda não existe):

[1 of 1] Compiling Main             ( teste.hs, interpreted )
Ok, modules loaded: Main.
*Main> ex
*** Exception: ./teste/ola.txt: openFile: does not exist (No such file or directory)
*Main> ex
ola.txt criado
*Main> 

ou seja, se a pasta não estiver ainda criada, ele cria-a, mas não escreve o ficheiro ola.txt . se invocarmos outra vez a função ela já escreve o ficheiro.

Alguma ajuda de como poderei resolver o problema...

Link to comment
Share on other sites

O mais provável é que vais executar o writeFile antes do processo de criar o directório ter concluido o seu trabalho.

Assim deverá funcionar. Poderias ter usado antes o system. Acho que é a mesma coisa 👍

import System.Directory
import System.IO
import System.Process

ex :: IO ()
ex = do x <- doesDirectoryExist "./teste"
              if (x) then do writeFile "./teste/ola.txt" "ola"
                                     putStrLn "ola.txt criado"
                      else runCommand "mkdir ./teste/" >>= waitForProcess >> writeFile "./teste/ola.txt" "ola" >>  putStrLn "ola.txt criado"

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.