상세 컨텐츠

본문 제목

이진 파일에 데이터 저장 및 로드

C#

by 메타 스토리 2023. 9. 5. 15:24

본문

데이터 저장 (Write to Binary File):

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        Person[] peopleToSave = {
            new Person { Name = "Alice", Age = 30 },
            new Person { Name = "Bob", Age = 25 },
            new Person { Name = "Charlie", Age = 35 }
        };

        string filePath = "data.dat";

        // 데이터를 이진 파일에 저장
        using (FileStream fs = new FileStream(filePath, FileMode.Create))
        {
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(fs, peopleToSave);
        }

        Console.WriteLine("Data saved to binary file.");
    }
}


데이터 로드 (Read from Binary File):

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        string filePath = "data.dat";

        // 이진 파일에서 데이터 로드
        using (FileStream fs = new FileStream(filePath, FileMode.Open))
        {
            BinaryFormatter bf = new BinaryFormatter();
            Person[] loadedPeople = (Person[])bf.Deserialize(fs);

            foreach (Person person in loadedPeople)
            {
                Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
            }
        }
    }
}
위의 예제는 텍스트 파일 및 이진 파일에 데이터를 저장하고 로드하는 가장 기본적인 방법입니다. 파일 경로 및 데이터 형식을 프로젝트에 맞게 수정하여 사용할 수 있습니다.


이진 파일에 데이터를 저장하고 로드하는 C# 예제에서 파일의 경로를 절대 경로로 수정한 코드를 보여드리겠습니다. 절대 경로를 사용하려면 파일이 저장될 정확한 경로를 지정해야 합니다. 아래 예제에서는 C:\MyData 디렉터리에 이진 파일을 저장하고 로드합니다.

csharp
Copy code
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable]
class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        string dataDirectory = @"C:\MyData"; // 원하는 경로로 수정

        // 데이터 저장
        string filePath = Path.Combine(dataDirectory, "data.bin");
        SaveDataToFile(filePath);

        // 데이터 로드
        Person loadedPerson = LoadDataFromFile(filePath);
        if (loadedPerson != null)
        {
            Console.WriteLine("Loaded Person:");
            Console.WriteLine($"Name: {loadedPerson.Name}, Age: {loadedPerson.Age}");
        }
        else
        {
            Console.WriteLine("Error loading data from file.");
        }
    }

    static void SaveDataToFile(string filePath)
    {
        Person personToSave = new Person
        {
            Name = "Alice",
            Age = 30
        };

        try
        {
            Directory.CreateDirectory(Path.GetDirectoryName(filePath));
            using (FileStream fs = new FileStream(filePath, FileMode.Create))
            {
                IFormatter formatter = new BinaryFormatter();
                formatter.Serialize(fs, personToSave);
                Console.WriteLine("Data saved to binary file.");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error saving data to file: " + ex.Message);
        }
    }

    static Person LoadDataFromFile(string filePath)
    {
        try
        {
            if (File.Exists(filePath))
            {
                using (FileStream fs = new FileStream(filePath, FileMode.Open))
                {
                    IFormatter formatter = new BinaryFormatter();
                    Person loadedPerson = (Person)formatter.Deserialize(fs);
                    return loadedPerson;
                }
            }
            else
            {
                Console.WriteLine("File does not exist.");
                return null;
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error loading data from file: " + ex.Message);
            return null;
        }
    }
}
위 코드에서 dataDirectory 변수를 원하는 절대 경로로 수정하고, filePath를 생성할 때 이 디렉터리와 파일 이름을 조합하여 파일의 경로를 정확하게 지정합니다. 이렇게 수정한 코드를 사용하면 원하는 경로에 이진 파일을 저장하고 로드할 수 있습니다.

 

이진 파일을 수정하려면 해당 파일의 내용을 읽어서 수정하고, 수정된 내용을 파일에 다시 쓰는 작업을 수행해야 합니다. 아래는 이진 파일을 수정하는 예제입니다. 파일 경로를 절대 경로로 수정하여 사용하세요.

using System;
using System.IO;

class Program
{
    static void Main()
    {
        // 이진 파일의 경로 (절대 경로로 수정)
        string filePath = @"C:\Path\To\Your\BinaryFile.bin";

        // 이진 파일 읽기
        byte[] fileBytes;
        using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        {
            fileBytes = new byte[fs.Length];
            fs.Read(fileBytes, 0, (int)fs.Length);
        }

        // 수정할 내용을 찾고 수정
        byte[] searchTextBytes = Encoding.UTF8.GetBytes("OldTextToReplace");
        byte[] replaceTextBytes = Encoding.UTF8.GetBytes("NewText");

        for (int i = 0; i < fileBytes.Length - searchTextBytes.Length; i++)
        {
            bool found = true;
            for (int j = 0; j < searchTextBytes.Length; j++)
            {
                if (fileBytes[i + j] != searchTextBytes[j])
                {
                    found = false;
                    break;
                }
            }

            if (found)
            {
                // "OldTextToReplace"를 "NewText"로 바꾸기
                for (int j = 0; j < searchTextBytes.Length; j++)
                {
                    fileBytes[i + j] = replaceTextBytes[j];
                }
            }
        }

        // 수정된 내용을 이진 파일에 쓰기
        using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Write))
        {
            fs.Write(fileBytes, 0, fileBytes.Length);
        }

        Console.WriteLine("이진 파일이 수정되었습니다.");
    }
}
이 코드는 지정된 이진 파일에서 "OldTextToReplace"라는 내용을 "NewText"로 수정한 후, 수정된 내용을 파일에 다시 씁니다. 파일 경로를 수정하여 사용하십시오.

 

 

'C#' 카테고리의 다른 글

BinaryFormatter  (0) 2023.09.06
StreamWriter 와 FileStream 그리고 BinaryWriter  (0) 2023.09.06
텍스트 파일에 저장및 로드  (0) 2023.09.05
Entity Framework  (0) 2023.09.05
LINQ 쿼리  (0) 2023.09.05

관련글 더보기