Gostaria de criar um arquivo .txt e escrever nele, e se o arquivo já existir, quero acrescentar mais algumas linhas:
string path = @"E:\AppServ\Example.txt";
if (!File.Exists(path))
{
File.Create(path);
TextWriter tw = new StreamWriter(path);
tw.WriteLine("The very first line!");
tw.Close();
}
else if (File.Exists(path))
{
TextWriter tw = new StreamWriter(path);
tw.WriteLine("The next line!");
tw.Close();
}
Mas a primeira linha parece sempre ser substituída ... como posso evitar escrever na mesma linha (estou usando isso em um loop)?
Eu sei que é uma coisa bem simples, mas nunca usei o WriteLine
método antes. Eu sou totalmente novo em c #.
c#
text-files
Berker Yüceer
fonte
fonte
if (file exists) { open file }
quase sempre está errado em todas as linguagens de programação! Para .NET, a solução é usarFile.Open(path, FileMode.Append, FileAccess.ReadWrite)
com sinalizadores apropriados.File.Open
delegar internamente a uma função WinAPI (consulte o próximo comentário), esperançosamente, impedindo a condição de corrida. A maioria das soluções aqui não faz isso e está obviamente sujeita às condições da corrida.Respostas:
Use o construtor correto :
fonte
File.Open(path, FileMode.Append, FileAccess.ReadWrite)
e verifique o tamanho do arquivo através desse fluxo retornado.Consulte também File.AppendAllText (). O AppendAllLines adicionará uma nova linha a cada linha sem precisar colocá-la lá.
Ambos os métodos criarão o arquivo se ele não existir, para que você não precise.
fonte
fonte
Close()
umausing
declaração, pois todos os recursos serão fechados antes de serem descartados automaticamente.Na verdade, você não precisa verificar se o arquivo existe, pois o StreamWriter fará isso por você. Se você o abrir no modo de acréscimo, o arquivo será criado se ele não existir, sempre será acrescentado e nunca será substituído. Portanto, seu cheque inicial é redundante.
fonte
File.AppendAllText adiciona uma seqüência de caracteres a um arquivo. Ele também cria um arquivo de texto se o arquivo não existir. Se você não precisa ler o conteúdo, é muito eficiente. O caso de uso está em log.
fonte
Você só quer abrir o arquivo no modo "anexar".
http://msdn.microsoft.com/en-us/library/3zc0w663.aspx
fonte
Quando você inicia o StreamWriter, ele substitui o texto que estava lá antes. Você pode usar a propriedade append da seguinte maneira:
fonte
fonte
File.Open(path, FileMode.Append, FileAccess.ReadWrite)
e verifique o tamanho do arquivo através desse fluxo retornado.Você poderia usar um FileStream. Isso faz todo o trabalho para você.
http://www.csharp-examples.net/filestream-open-file/
fonte
Tente isso.
fonte
File.AppendText(path)
, e com ele não há necessidade de verificarFile.Exists(path)
. EIf (not A) Else If (A)
é um estranho If / Else. Basicamente, não há nada de bom nessa questão, nenhum código de explicação que seja uma versão redudante de outra resposta.File.Open(path, FileMode.Append, FileAccess.ReadWrite)
e verifique o tamanho do arquivo através desse fluxo retornado.Você pode apenas usar o método File.AppendAllText (), isso resolverá o seu problema. Este método cuidará da criação do arquivo, se não estiver disponível, abrindo e fechando o arquivo.
fonte
Na documentação da Microsoft, você pode criar um arquivo, se não existir, e anexá-lo em uma única chamada, método File.AppendAllText (String, String)
.NET Framework (versão atual) Outras versões
Abre um arquivo, anexa a sequência especificada ao arquivo e, em seguida, fecha o arquivo. Se o arquivo não existir, esse método cria um arquivo, grava a sequência especificada no arquivo e fecha o arquivo. Espaço para nome: System.IO Assembly: mscorlib (em mscorlib.dll)
Sintaxe C # C ++ F # VB public static void AppendAllText (caminho da string, conteúdo da string) Caminho dos parâmetros Tipo: System.String O arquivo ao qual anexar a string especificada. conteúdo Tipo: System.String A cadeia de caracteres a ser anexada ao arquivo.
AppendAllText
fonte
fonte