Chciałbym stworzyć plik .txt i napisać do niego, a jeśli plik już istnieje, chcę tylko dodać kilka wierszy:
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();
}
Ale wydaje się, że pierwsza linia zawsze jest nadpisywana ... jak mogę uniknąć pisania w tej samej linii (używam tego w pętli)?
Wiem, że to dość prosta rzecz, ale nigdy wcześniej nie korzystałem z tej WriteLine
metody. Jestem zupełnie nowy w C #.
c#
text-files
Berker Yüceer
źródło
źródło
if (file exists) { open file }
jest prawie zawsze błędny we wszystkich językach programowania! W przypadku platformy .NET rozwiązaniem jest użycieFile.Open(path, FileMode.Append, FileAccess.ReadWrite)
odpowiednich flag.File.Open
wewnętrznie deleguje do funkcji WinAPI (patrz następny komentarz), miejmy nadzieję, że zapobiega wyścigowi. Większość rozwiązań tutaj tego nie robi i są one oczywiście uzależnione od warunków wyścigu.Odpowiedzi:
Użyj odpowiedniego konstruktora :
źródło
File.Open(path, FileMode.Append, FileAccess.ReadWrite)
i sprawdź rozmiar pliku przez ten zwrócony strumień.Zobacz także File.AppendAllText (). AppendAllLines doda nową linię do każdej linii bez konieczności jej samodzielnego umieszczania.
Obie metody utworzą plik, jeśli nie istnieje, więc nie musisz.
źródło
źródło
Close()
zusing
instrukcji, ponieważ wszystkie zasoby zostaną zamknięte przed automatycznym usunięciem.W rzeczywistości nie musisz sprawdzać, czy plik istnieje, ponieważ StreamWriter zrobi to za Ciebie. Jeśli otworzysz go w trybie dopisywania, plik zostanie utworzony, jeśli nie istnieje, wtedy zawsze będziesz dodawać i nigdy nie nadpisywać. Więc twoja wstępna kontrola jest zbędna.
źródło
File.AppendAllText dodaje ciąg do pliku. Tworzy również plik tekstowy, jeśli plik nie istnieje. Jeśli nie musisz czytać treści, jest to bardzo wydajne. Przypadek użycia to rejestrowanie.
źródło
Chcesz tylko otworzyć plik w trybie „dołączania”.
http://msdn.microsoft.com/en-us/library/3zc0w663.aspx
źródło
Po uruchomieniu StreamWriter zastępuje tekst, który był tam wcześniej. Możesz użyć właściwości append w następujący sposób:
źródło
źródło
File.Open(path, FileMode.Append, FileAccess.ReadWrite)
i sprawdź rozmiar pliku przez ten zwrócony strumień.Możesz użyć FileStream. To wykonuje całą pracę za Ciebie.
http://www.csharp-examples.net/filestream-open-file/
źródło
Spróbuj tego.
źródło
File.AppendText(path)
, a dzięki temu nie trzeba go sprawdzaćFile.Exists(path)
. IIf (not A) Else If (A)
to dziwne Jeśli / Inaczej. Zasadniczo nie ma nic dobrego w tym pytaniu, nie ma kodu wyjaśniającego, który byłby redudatywną wersją innej odpowiedzi.File.Open(path, FileMode.Append, FileAccess.ReadWrite)
i sprawdź rozmiar pliku przez ten zwrócony strumień.Możesz po prostu użyć metody File.AppendAllText (), aby rozwiązać problem. Ta metoda zajmie się tworzeniem pliku, jeśli nie jest dostępna, otwieraniem i zamykaniem pliku.
źródło
Z dokumentacji firmy Microsoft można utworzyć plik, jeśli nie istnieje, i dołączyć do niego w jednym wywołaniu Metoda File.AppendAllText (String, String)
.NET Framework (aktualna wersja) Inne wersje
Otwiera plik, dołącza określony ciąg do pliku, a następnie zamyka plik. Jeśli plik nie istnieje, ta metoda tworzy plik, zapisuje określony ciąg do pliku, a następnie zamyka plik. Przestrzeń nazw: System.IO Assembly: mscorlib (w mscorlib.dll)
Składnia C # C ++ F # VB public static void AppendAllText (ścieżka ciągu, zawartość ciągu) Parametry ścieżka Typ: System.String Plik, do którego ma zostać dołączony określony ciąg. zawartość Typ: System.String Ciąg do dołączenia do pliku.
AppendAllText
źródło
źródło