파일을 읽고 쓰는 가장 쉬운 방법


342

C #에서 파일 ( 바이너리가 아닌 텍스트 파일) 을 읽고 쓰는 방법에는 여러 가지가 있습니다.

프로젝트에서 파일로 많은 작업을 할 것이기 때문에 쉽고 간단한 코드가 필요한 것이 필요합니다. 내가 필요한 것은 s string를 읽고 쓰는 것이므로 무언가가 필요합니다 string.

답변:


545

File.ReadAllTextFile.WriteAllText를 사용하십시오 .

더 간단 할 수 없습니다 ...

MSDN 예 :

// Create a file to write to.
string createText = "Hello and Welcome" + Environment.NewLine;
File.WriteAllText(path, createText);

// Open the file to read from.
string readText = File.ReadAllText(path);

2
실제로 매우 간단하지만 왜 질문을 게시해야합니까? OP는 아마 나 자신과 17 명의 지지자처럼,의 방향을 따라 "잘못된"방향을 바라봤을 것입니다 string.Write(filename). 왜 Microsoft의 솔루션이 나의 것보다 더 간단하고 더 낫습니까?
Roland

7
@Roland, .net에서 파일 처리는 언어가 아닌 프레임 워크에 의해 제공됩니다 (예를 들어 파일을 선언하고 조작하는 C # 키워드는 없습니다). 문자열은보다 일반적인 개념이므로 C #에 포함되는 것이 일반적입니다. 따라서 파일은 문자열에 대해 알고 있지만 그 반대는 아닙니다.
vc 74

Xml은 C #의 데이터 유형에 대한 일반적인 개념이며 여기서 XmlDocument.Save (filename)과 같은 것을 찾을 수 있습니다. 그러나 물론 차이점은 일반적으로 하나의 Xml 개체가 하나의 파일과 일치하지만 여러 문자열이 하나의 파일을 형성한다는 것입니다.
Roland

7
@Roland 지원하려는 경우 "foo".Write(fileName)확장 기능을 쉽게 만들어 public static Write(this string value, string fileName) { File.WriteAllText(fileName, value);}프로젝트에서 사용할 수 있습니다.
Alexei Levenkov

1
File.WriteAllLines (filename, string [])도 있습니다
Mitch Wheat

163

또한에 File.ReadAllText, File.ReadAllLines그리고 File.WriteAllText(에서와 유사한 도우미 File에 표시된 클래스) 다른 답변을 사용할 수 StreamWriter/ StreamReader클래스를.

텍스트 파일 작성 :

using(StreamWriter writetext = new StreamWriter("write.txt"))
{
    writetext.WriteLine("writing in text file");
}

텍스트 파일을 읽는 중 :

using(StreamReader readtext = new StreamReader("readme.txt"))
{
   string readText = readtext.ReadLine();
}

노트:

  • readtext.Dispose()대신 사용할 수 using있지만 예외가 발생하면 파일 / 리더 / 라이터가 닫히지 않습니다.
  • 상대 경로는 현재 작업 디렉토리에 상대적입니다. 절대 경로를 사용 / 구성 할 수 있습니다.
  • 누락 using/ Close"데이터가 파일에 기록되지 않는 이유"매우 일반적인 이유입니다.

3
에 있는지 확인하십시오 using- 다른 대답에 그림과 같이 스트림 stackoverflow.com/a/7571213/477420
알렉세이 Levenkov을

5
필요 using System.IO;사용하는 StreamWriter를에서는 StreamReader를 .
지방

1
파일이 존재하지 않으면 StreamWriter는 WriteLine을 시도 할 때 파일을 작성합니다. 이 경우 WriteLine이 호출 될 때 write.txt가 없으면 작성됩니다.
TheMiddleMan

3
또한 파일에 텍스트를 추가하기위한 과부하가 있다는 점에 주목할 필요가 있습니다. new StreamWriter("write.txt", true)파일이 존재하지 않으면 파일이 생성되고, 그렇지 않으면 기존 파일에 추가됩니다.
ArieKanarie

또한 FileStream과 함께 streamreader와 streamwriter를 사용하는 경우 (파일 이름 대신 전달) 읽기 전용 모드 및 / 또는 공유 모드에서 파일을 열 수 있습니다.
Simon Zyx

18
FileStream fs = new FileStream(txtSourcePath.Text,FileMode.Open, FileAccess.Read);
using(StreamReader sr = new StreamReader(fs))
{
   using (StreamWriter sw = new StreamWriter(Destination))
   {
            sw.writeline("Your text");
    }
}

1
fs마지막에 왜 해체하지 않습니까?
LuckyLikey

1
StreamReader가 당신을 위해 그렇게하기 때문에 @LuckyLikey. 그러나 두 번째 사용의 중첩은 필요하지 않습니다
Novaterata

설명 할 수 있습니까? 왜 StreamReader가 fs를 폐기해야합니까? 내가 볼 수있는 한 sr 만 처분 할 수 있습니다. 여기에 세 번째 using 문이 필요합니까?
Philm

using 문에서 객체를 폐기하지 마십시오. 문이 반환되면 Dispose 메서드가 자동으로 호출되며 명령문이 중첩되었는지 여부에 관계없이 결국 모든 것이 호출 스택에 정렬됩니다.
Patrik Forsberg

11
using (var file = File.Create("pricequote.txt"))
{
    ...........                        
}

using (var file = File.OpenRead("pricequote.txt"))
{
    ..........
}

작업이 완료되면 간단하고 쉬우 며 처리 / 정리도합니다.


10

파일에서 읽고 파일에 쓰는 가장 쉬운 방법 :

//Read from a file
string something = File.ReadAllText("C:\\Rfile.txt");

//Write to a file
using (StreamWriter writer = new StreamWriter("Wfile.txt"))
{
    writer.WriteLine(something);
}

5
File.WriteAllText글을 쓰지 않습니까?
피터 Mortensen

9

@AlexeiLevenkov는 또 다른 "가장 쉬운 방법", 즉 확장 방법을 지적했습니다 . 약간의 코딩이 필요하며 읽고 쓰는 가장 쉬운 방법을 제공하며 개인의 요구에 따라 변형을 만들 수있는 유연성을 제공합니다. 다음은 완전한 예입니다.

string유형 에 대한 확장 방법을 정의합니다 . 실제로 중요한 것은 extra keyword가있는 함수 인수 this이므로 메소드가 연결된 오브젝트를 참조하게합니다. 클래스 이름은 중요하지 않습니다. 클래스와 메소드 선언 해야 합니다 static.

using System.IO;//File, Directory, Path

namespace Lib
{
    /// <summary>
    /// Handy string methods
    /// </summary>
    public static class Strings
    {
        /// <summary>
        /// Extension method to write the string Str to a file
        /// </summary>
        /// <param name="Str"></param>
        /// <param name="Filename"></param>
        public static void WriteToFile(this string Str, string Filename)
        {
            File.WriteAllText(Filename, Str);
            return;
        }

        // of course you could add other useful string methods...
    }//end class
}//end ns

string extension method이것은를 사용하는 방법입니다. 자동으로 다음을 나타냅니다 class Strings.

using Lib;//(extension) method(s) for string
namespace ConsoleApp_Sandbox
{
    class Program
    {
        static void Main(string[] args)
        {
            "Hello World!".WriteToFile(@"c:\temp\helloworld.txt");
            return;
        }

    }//end class
}//end ns

나는 이것을 직접 발견하지 못했지만 훌륭하게 작동하므로 이것을 공유하고 싶었습니다. 즐기세요!


7

파일에 쓰거나 파일을 읽는 데 가장 일반적으로 사용되는 방법은 다음과 같습니다.

using System.IO;

File.AppendAllText(sFilePathAndName, sTextToWrite);//add text to existing file
File.WriteAllText(sFilePathAndName, sTextToWrite);//will overwrite the text in the existing file. If the file doesn't exist, it will create it. 
File.ReadAllText(sFilePathAndName);

내가 대학에서 가르친 오래된 방법은 스트림 리더 / 스트림 라이터를 사용하는 것이었지만 File I / O 메서드는 덜 복잡하고 더 적은 코드 줄이 필요합니다. "파일"을 입력 할 수 있습니다. IDE에서 (System.IO import 문을 포함시켜야 함) 사용 가능한 모든 메소드를 확인하십시오. 다음은 Windows Forms 앱을 사용하여 텍스트 파일 (.txt)에서 문자열을 읽거나 쓰는 방법의 예입니다.

기존 파일에 텍스트를 추가하십시오.

private void AppendTextToExistingFile_Click(object sender, EventArgs e)
{
    string sTextToAppend = txtMainUserInput.Text;
    //first, check to make sure that the user entered something in the text box.
    if (sTextToAppend == "" || sTextToAppend == null)
    {MessageBox.Show("You did not enter any text. Please try again");}
    else
    {
        string sFilePathAndName = getFileNameFromUser();// opens the file dailog; user selects a file (.txt filter) and the method returns a path\filename.txt as string.
        if (sFilePathAndName == "" || sFilePathAndName == null)
        {
            //MessageBox.Show("You cancalled"); //DO NOTHING
        }
        else 
        {
            sTextToAppend = ("\r\n" + sTextToAppend);//create a new line for the new text
            File.AppendAllText(sFilePathAndName, sTextToAppend);
            string sFileNameOnly = sFilePathAndName.Substring(sFilePathAndName.LastIndexOf('\\') + 1);
            MessageBox.Show("Your new text has been appended to " + sFileNameOnly);
        }//end nested if/else
    }//end if/else

}//end method AppendTextToExistingFile_Click

파일 탐색기 / 파일 열기 대화 상자를 통해 사용자로부터 파일 이름을 가져옵니다 (기존 파일을 선택하려면이 파일이 필요함).

private string getFileNameFromUser()//returns file path\name
{
    string sFileNameAndPath = "";
    OpenFileDialog fd = new OpenFileDialog();
    fd.Title = "Select file";
    fd.Filter = "TXT files|*.txt";
    fd.InitialDirectory = Environment.CurrentDirectory;
    if (fd.ShowDialog() == DialogResult.OK)
    {
        sFileNameAndPath = (fd.FileName.ToString());
    }
    return sFileNameAndPath;
}//end method getFileNameFromUser

기존 파일에서 텍스트를 가져옵니다.

private void btnGetTextFromExistingFile_Click(object sender, EventArgs e)
{
    string sFileNameAndPath = getFileNameFromUser();
    txtMainUserInput.Text = File.ReadAllText(sFileNameAndPath); //display the text
}

5

또는 정말로 라인에 관한 것이라면 :

System.IO.File에는 정적 메소드 WriteAllLines 도 포함되어 있으므로 다음을 수행 할 수 있습니다.

IList<string> myLines = new List<string>()
{
    "line1",
    "line2",
    "line3",
};

File.WriteAllLines("./foo", myLines);

5

읽을 때 OpenFileDialog 컨트롤을 사용하여 읽으려는 파일을 찾아 보는 것이 좋습니다. 아래 코드를 찾으십시오.

using파일을 읽기 위해 다음 명령문을 추가하는 것을 잊지 마십시오 .using System.IO;

private void button1_Click(object sender, EventArgs e)
{
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
         textBox1.Text = File.ReadAllText(openFileDialog1.FileName);  
    }
}

파일을 쓰려면이 방법을 사용할 수 있습니다 File.WriteAllText.


2
     class Program
    { 
         public static void Main()
        { 
            //To write in a txt file
             File.WriteAllText("C:\\Users\\HP\\Desktop\\c#file.txt", "Hello and Welcome");

           //To Read from a txt file & print on console
             string  copyTxt = File.ReadAllText("C:\\Users\\HP\\Desktop\\c#file.txt");
             Console.Out.WriteLine("{0}",copyTxt);
        }      
    }

1

당신이 찾고있는 File, StreamWriterStreamReader클래스.


6
매우 도움이되지 않는 답변. 이는 이제 답변을 찾기 위해 OP가이 용어를 Google로 보내야한다는 의미입니다. 가장 좋은 대답은 예입니다.
tno2007

0
private void Form1_Load(object sender, EventArgs e)
    {
        //Write a file
        string text = "The text inside the file.";
        System.IO.File.WriteAllText("file_name.txt", text);

        //Read a file
        string read = System.IO.File.ReadAllText("file_name.txt");
        MessageBox.Show(read); //Display text in the file
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.