Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
24분 34초
C#에서의 파일 입출력(I/O) 작업은 많은 소프트웨어 애플리케이션에서 필수적인 부분으로, 개발자가 파일을 효율적으로 읽고 쓸 수 있도록 해줍니다. 데이터를 저장하든, 애플리케이션 이벤트를 기록하든, 대량의 텍스트 또는 바이너리 데이터를 처리하든, C#은 파일 작업을 위한 강력한 도구를 제공합니다. Tim Corey의 비디오 " C# 데이터 액세스: 텍스트 파일 "에서 그는 텍스트 파일을 데이터 저장 및 검색에 사용하는 방법을 중심으로 이러한 파일 작업에 대한 자세한 설명을 제공합니다. 이 글은 Tim이 영상에서 다룬 핵심 개념과 기법을 요약하여 C#에서의 파일 입출력 작업에 대한 실질적인 통찰력을 제공하는 것을 목표로 합니다.
C#에서 파일 입출력 작업은 텍스트 파일에서 읽고 쓰는 데 필수적입니다. File 클래스는 기존 파일과 상호작용하거나 새 파일을 생성하기 위한 정적 메서드를 제공합니다. StreamReader 및 StreamWriter 는 파일을 읽고 쓰는 데 일반적으로 사용됩니다. StreamReader 는 파일을 한 줄씩 읽어서 각 텍스트 줄이나 문자열 배열로 접근할 수 있게 해줍니다. 또한 while 루프를 사용하여 대형 파일을 효율적으로 읽을 수 있습니다. StreamWriter 클래스는 파일에 데이터를 쓰기 위해 사용되며, 문자열과 배열을 쓰는 것을 지원합니다. 기존 파일에 텍스트를 추가하거나 전체 파일을 덮어쓸 수 있습니다. WriteLine 및 WriteText 와 같은 메서드를 통해 텍스트 파일 내에서 쉽게 데이터를 조작할 수 있습니다.
이러한 작업은 일반적으로 static void Main 메서드 내에서 수행되며, 여기서 파일 경로를 정의합니다. 예를 들어, 파일 이름을 지정하고 StreamWriter 을 사용하여 단일 문자열이나 전체 문자열 배열을 쓸 수 있습니다. using 문장은 작업 후 파일이 적절히 닫혀 리소스 누수가 발생하지 않도록 합니다. StreamReader 는 또한 파일을 한 줄씩 읽는 데 사용될 수 있으며, 파일이 존재하지 않거나 접근할 수 없는 경우 잠재적인 오류를 관리하기 위해 예외를 처리할 수 있습니다. 이러한 파일 입출력 기능 덕분에 C#은 파일을 효율적이고 효과적으로 다루는 데 탁월한 선택입니다.
Tim은 C#에서 텍스트 파일을 읽고 쓰는 것이 얼마나 간단한지를 강조하면서 주제를 소개합니다. 그는 몇 줄의 코드로 이러한 작업들을 수행할 수 있음을 보여주며, 텍스트 파일이 데이터 저장에 실용적인 선택지가 될 수 있음을 입증합니다.
Tim은 Visual Studio를 사용하여 "TextFileDataAccessDemo"라는 이름의 새 콘솔 애플리케이션을 만드는 것으로 시작합니다.
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
namespace TextFileDataAccessDemo
{
class Program
{
static void Main(string[] args)
{
Console.ReadLine(); // Keeps the console window open to view the output
}
}
}Imports System
Imports System.IO
Imports System.Collections.Generic
Imports System.Linq
Namespace TextFileDataAccessDemo
Class Program
Shared Sub Main(ByVal args As String())
Console.ReadLine() ' Keeps the console window open to view the output
End Sub
End Class
End Namespace그는 Console.ReadLine 을 사용하여 콘솔 창을 열어두고 사용자들이 출력을 볼 수 있도록 설명합니다.
Tim은 File.ReadAllLines 메서드를 사용하여 텍스트 파일을 읽는 방법을 설명합니다. 그는 파일 경로를 처리하는 방법과 이스케이프 문자를 피하기 위해 문자열 리터럴을 사용하는 방법을 보여줍니다.
string filePath = @"C:\demos\test.txt";
List<string> lines = File.ReadAllLines(filePath).ToList();Dim filePath As String = "C:\demos\test.txt"
Dim lines As List(Of String) = File.ReadAllLines(filePath).ToList()File.ReadAllLines 메서드는 지정된 파일에서 모든 줄을 읽고 이를 문자열 배열로 반환합니다. 팀은 조작을 쉽게 하기 위해 이 배열을 리스트로 변환합니다.
Tim은 File.WriteAllLines 메서드를 사용하여 데이터를 텍스트 파일에 쓰는 방법을 설명합니다. 그는 목록에 새 줄을 추가하고 업데이트된 목록을 파일에 다시 쓰는 방법을 보여줍니다.
lines.Add("Sue,Storm,WWIStorm.com");
File.WriteAllLines(filePath, lines);lines.Add("Sue,Storm,WWIStorm.com")
File.WriteAllLines(filePath, lines)이 코드는 목록에 새 항목을 추가하고 전체 목록을 파일에 다시 저장합니다.
Tim은 텍스트 파일의 각 항목에 대한 데이터 구조를 나타내는 Person 클래스를 만듭니다.
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string URL { get; set; }
}Public Class Person
Public Property FirstName As String
Public Property LastName As String
Public Property URL As String
End Class그는 파일을 읽어 Person 객체 목록을 채웁니다.
List<Person> people = new List<Person>();
List<string> lines = File.ReadAllLines(filePath).ToList();
foreach (string line in lines)
{
string[] entries = line.Split(',');
Person newPerson = new Person
{
FirstName = entries[0],
LastName = entries[1],
URL = entries[2]
};
people.Add(newPerson);
}Dim people As New List(Of Person)()
Dim lines As List(Of String) = File.ReadAllLines(filePath).ToList()
For Each line As String In lines
Dim entries As String() = line.Split(","c)
Dim newPerson As New Person With {
.FirstName = entries(0),
.LastName = entries(1),
.URL = entries(2)
}
people.Add(newPerson)
Next이 코드는 각 라인을 읽어 콤마로 나누고, 추출된 데이터로 Person 객체를 생성합니다.
Tim은 C# 6.0의 기능인 문자열 보간을 소개합니다. 이 기능은 변수와 문자열을 결합하는 과정을 간소화합니다. 이 메서드는 문자열 앞에 $ 기호와 중괄호 {} 를 사용하여 문자열 안에 변수를 직접 포함시킵니다.
foreach (var person in people)
{
Console.WriteLine($"{person.FirstName} {person.LastName}: {person.URL}");
}For Each person In people
Console.WriteLine($"{person.FirstName} {person.LastName}: {person.URL}")
Next이 문법은 전통적인 + 연산자를 사용한 문자열 연결보다 간결하고 효율적입니다.

팀은 텍스트 파일에서 데이터를 읽을 때 데이터 유효성 검사의 중요성을 강조합니다. 그는 데이터 구조를 추측하는 것의 위험성을 지적하고 분할된 항목의 길이를 확인하는 것을 권장합니다.
foreach (string line in lines)
{
string[] entries = line.Split(',');
if (entries.Length == 3)
{
Person newPerson = new Person
{
FirstName = entries[0],
LastName = entries[1],
URL = entries[2]
};
people.Add(newPerson);
}
else
{
// Handle error
Console.WriteLine("Invalid data format.");
}
}For Each line As String In lines
Dim entries As String() = line.Split(","c)
If entries.Length = 3 Then
Dim newPerson As New Person With {
.FirstName = entries(0),
.LastName = entries(1),
.URL = entries(2)
}
people.Add(newPerson)
Else
' Handle error
Console.WriteLine("Invalid data format.")
End If
Next이렇게 하면 항목 수가 올바른 줄만 처리되므로 잠재적인 런타임 오류를 방지할 수 있습니다.
Tim은 새 객체를 리스트에 추가하는 방법을 보여줍니다. 그는 Person 클래스의 익명 인스턴스를 사용하여 새 사람을 리스트에 추가합니다.
people.Add(new Person { FirstName = "Greg", LastName = "Jones", URL = "WOWT.com" });people.Add(New Person With {.FirstName = "Greg", .LastName = "Jones", .URL = "WOWT.com"})이것은 새 Person 객체를 생성하고 초기화하며, 이어 people 리스트에 추가합니다.
Tim은 Person 객체 목록을 텍스트 파일로 다시 쓰는 방법을 설명합니다. 그는 Person 객체 목록을 문자열 목록으로 변환하여, 각 문자열이 파일의 한 줄을 나타냅니다.
List<string> output = new List<string>();
foreach (var person in people)
{
output.Add($"{person.FirstName},{person.LastName},{person.URL}");
}
File.WriteAllLines(filePath, output);Dim output As New List(Of String)()
For Each person In people
output.Add($"{person.FirstName},{person.LastName},{person.URL}")
Next
File.WriteAllLines(filePath, output)이 코드는 people 리스트를 반복하여 각 Person 객체에 대한 CSV 문자열을 생성하고 문자열 목록을 파일에 씁니다.
Tim Corey의 C# 파일 입출력 작업에 대한 자세한 가이드는 텍스트 파일 읽기 및 쓰기에 대한 실질적인 정보를 제공합니다. 그의 사례를 따르면 개발자들은 텍스트 파일을 사용하여 데이터를 효과적으로 관리하고 견고한 데이터 저장 솔루션을 구현할 수 있습니다. 심층적인 이해와 실질적인 학습 경험을 위해, 팀 코리의 영상을 시청하시기를 강력히 추천합니다. 그는 실제 사례를 통해 이러한 개념들을 더욱 자세히 설명합니다.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy