Jump to content
punkzero

Problema com runCommand + writeFile

Recommended Posts

punkzero

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...

Share this post


Link to post
Share on other sites
Betovsky

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 :thumbsup:

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

Share this post


Link to post
Share on other sites
jpedro20

Aproveito para tirar uma dúvida:

quando faço writeFile "~/Desktop/file.text" "blablabla"

diz que não existe este caminho.

Como posso criar o ficheiro no Desktop sem usar o path "/users/***/Desktop/file.text"?

Share this post


Link to post
Share on other sites
Rui Carlos

Podes criar o ficheiro na pasta em que estás a trabalhar. Ou também podes tentar aceder à variável de ambiente HOME (assumindo que estás num sistema UNIX).

Share this post


Link to post
Share on other sites
jpedro20

Podes criar o ficheiro na pasta em que estás a trabalhar.

Sim acabei por fazer isso :thumbsup:

Share this post


Link to post
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

×
×
  • 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.