Estou tentando detectar se existe um arquivo em tempo de execução, se não, crie-o. No entanto, estou recebendo este erro quando tento escrever nele:
O processo não pode acessar o arquivo 'myfile.ext' porque ele está sendo usado por outro processo.
string filePath = string.Format(@"{0}\M{1}.dat", ConfigurationManager.AppSettings["DirectoryPath"], costCentre);
if (!File.Exists(filePath))
{
File.Create(filePath);
}
using (StreamWriter sw = File.AppendText(filePath))
{
//write my text
}
Alguma ideia de como consertar isso?
File.Create()
método! O trecho acima já cria o arquivo!Quero atualizar essa resposta para dizer que essa não é realmente a maneira mais eficiente de escrever todo o texto. Você só deve usar este código se precisar de algo rápido e sujo.
Eu era um jovem programador quando respondi a essa pergunta e, naquela época, achava que era algum tipo de gênio por ter essa resposta.
fonte
FileStream(string, FileMode)
construtor e passá-lo FileMode.Create , que sobrescreverá qualquer arquivo existente. Ainda não há necessidade de abrir o arquivo duas vezes. Além disso, essa resposta foi editada depois que postei meu comentário original..Close()
no final, então funciona em qualquer caso. Desconfio do sistema de usarFileStream
para tudo porque não quero que aconteça a exceção deFileMode.Create
que o arquivo já está lá - especialmente quando quero limpar o conteúdo e não anexar a eleFileMode.Open
. Para mim,FileStream
só funciona realmente depois de me livrar do arquivo em questão e, em seguida, escrever para ele. ComoFile.Create
está deixando-o aberto e trancado, parece que adicionar.Close()
a ele é a única maneira real de lidar com meu cenário e SOs.Ao criar um arquivo de texto, você pode usar o seguinte código:
Usando o código do seu comentário. O arquivo (fluxo) que você criou deve ser fechado. File.Create retorna o fluxo de arquivos para o arquivo recém-criado:
fonte
File.Create
retornaFileStream
e isso temClose()
fonte
File.Create retorna um FileStream. Você precisa fechar isso quando escrever no arquivo:
Você pode usar para fechar o arquivo automaticamente.
fonte
StreamWriter
, pode-se inferir do uso deFile.AppendText
.Eu atualizei sua pergunta com o snippet de código. Após o recuo adequado, fica imediatamente claro qual é o problema: você usa,
File.Create()
mas não fecha oFileStream
que ele retorna.Fazer assim é desnecessário,
StreamWriter
já permite anexar a um arquivo existente e criar um novo arquivo se ainda não existir. Como isso:Que usa este
StreamWriter
construtor .fonte
Esta pergunta já foi respondida, mas aqui está uma solução do mundo real que verifica se o diretório existe e adiciona um número ao final se o arquivo de texto existe. Eu uso isso para criar arquivos de log diários em um serviço do Windows que escrevi. Espero que isso ajude alguém.
fonte
Eu sei que esta é uma pergunta antiga, mas eu só quero jogar isso para fora que você ainda pode usar
File.Create("filename")"
, basta adicionar.Dispose()
a ela.File.Create("filename").Dispose();
Desta forma, ele cria e fecha o arquivo para o próximo processo utilizá-lo.
fonte
File.Create(FilePath).Close();
da resposta acima temthis.Dispose(true); GC.SuppressFinalize((object) this);
em sua implementação.Acho que sei o motivo dessa exceção. Você pode estar executando este trecho de código em vários segmentos.
fonte
Experimente: Funciona em qualquer caso, se o arquivo não existir, ele irá criá-lo e depois gravá-lo. E se já existir, não há problema, ele vai abrir e escrever nele:
fonte