Eu tenho um pedaço de código aqui que quebra se o diretório não existir:
System.IO.File.WriteAllText(filePath, content);
Em uma linha (ou algumas linhas), é possível verificar se o diretório que leva ao novo arquivo não existe e, se não, criá-lo antes de criar o novo arquivo?
Estou usando o .NET 3.5.
Respostas:
Para criar
(new FileInfo(filePath)).Directory.Create()
Antes de gravar no arquivo..... Ou, se existir, crie (senão não faça nada)
fonte
Task.Run(() => );
.Você pode usar o seguinte código
fonte
Directory.CreateDirectory
faz exatamente o que você deseja: Ele cria o diretório se ainda não existir. Não há necessidade de fazer uma verificação explícita primeiro .path
for um arquivo e não um diretório. msdn.microsoft.com/pt-br/library/54a0at6s(v=vs.110).aspxComo o @hitec disse, você deve ter certeza de que possui as permissões corretas; se tiver, poderá usar esta linha para garantir a existência do diretório:
Directory.CreateDirectory(Path.GetDirectoryName(filePath))
fonte
Uma maneira elegante de mover seu arquivo para um diretório inexistente é criar a seguinte extensão para a classe FileInfo nativa:
Em seguida, use a nova extensão MoveTo:
Verifique a documentação da extensão Methods .
fonte
Você pode usar File.Exists para verificar se o arquivo existe e criá-lo usando File.Create se necessário. Verifique se você tem acesso para criar arquivos nesse local.
Quando tiver certeza de que o arquivo existe, você poderá gravá-lo com segurança. Embora como precaução, você deve colocar seu código em uma tentativa ... capturar um bloco e capturar as exceções que essa função provavelmente aumentará se as coisas não saírem exatamente como o planejado.
Informações adicionais para conceitos básicos de E / S de arquivo .
fonte
var filePath = context.Server.MapPath(Convert.ToString(ConfigurationManager.AppSettings["ErrorLogFile"]));
var file = new FileInfo(filePath);
file.Directory.Create();
Se o diretório já existir, esse método não fará nada.var sw = new StreamWriter(filePath, true);
sw.WriteLine(Enter your message here);
sw.Close();
fonte