Записать результат выполнения программы в файл

Есть код, нужно записать результат выполнения в файл , при использовании StreamWriter файл который создан в папке с кодом остается пустым, не пойму почему? Подаскажите пожалуйста!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

class ArrayClass2D
{
    const int MAX = 100;
    static void Print2DArray(int m, int n,char[] arr,char[,] a)
    {
/* k - starting row index
m - ending row index
l - starting column index
n - ending column index */
        int count = 0;
        int k = 0, l = 0;
        while (k < m && l < n) 
        {
            for (int i = l; i < n; ++i)
            {
                a[k,i] = arr [count++];
            }
            k++;
            for (int i = k; i < m; ++i) 
            {
                a[i,n - 1] = arr [count++];
            }

            n--;
            if (k < m) 
            {
                for (int i = n - 1; i >= l; --i) 
                {
                    a[m - 1,i] = arr [count++];
                }
                m--;
            }
            if (l < n) 
            {
                for (int i = m - 1; i >= k; --i) 
                {
                    a[i,l] = arr [count++];
                }
                l++;
            }
        }
    }
    static void Main()
    { 
        string path = "/home/kura1/codeprojects/Test1/CharArray/sample.txt";
        string s = Console.ReadLine();
        int m = 4, n = 5;
        string trimed = String.Concat(s.Where (c=> !Char.IsWhiteSpace(c)));
        char [] arr = trimed.ToCharArray();
        char [,] a = new char [MAX,MAX];
        Print2DArray(m,n,arr,a);
        try
        {
            StreamWriter sw = new StreamWriter (path);
            for (int i = 0; i < m; i++) 
            {
                for (int j = 0; j < n; j++) 
                {
                    sw.Write( "{0,3}",a[i,j]);
                }
                sw.Write("\n");
            }
        }
        catch(Exception ex)
        {
            Console.WriteLine ("Expet" + ex.Message);
        }
    }
}

Ответы (2 шт):

Автор решения: Pekor

Ответ написан на основе комментария @LaukhinAndrey

Для того, чтобы записывать что-либо в файл с помощью StreamWriter необходимо после функции Write вызывать функцию Flush. Но можно поступить проще и использовать using, который автоматически вызывает эту функцию и освобождает ресурсы после выхода из конструкции using. Делается это так:

using (StreamWriter sw = new StreamWriter(path))
{
    //тут код записи в файл необходимых данных с помощью StreamWriter
    for (int i = 0; i < m; i++) 
    {
        for (int j = 0; j < n; j++) 
        {
            sw.Write( "{0,3}",a[i,j]);
        }
        sw.Write("\n");
    }
}
→ Ссылка
Автор решения: aepot

Вот вы файл открыли для записи, записали туда что-то, а закрывать кто будет?

Вариант 1

Ненадежное решение

StreamWriter sw = new StreamWriter(path);
// тут запись
sw.Close(); // или sw.Dispose(); - без разницы

Если при записи будет выброшено исключение, то строка sw.Close() не выполнится, вследствие чего файл может на какое-то время оставаться открытым

Вариант 2

Надежное решение

StreamWriter sw = new StreamWriter(path);
try
{
    // тут запись
}
finally
{
    sw.Close();
}

Вариант 3

То же самое что Вариант 2, только с использованием дополнительного C# синтаксиса, чтобы код был короче

using (StreamWriter sw = new StreamWriter(path))
{
    // тут запись
}

Вариант 4

Современный C# 8 синтаксис

using StreamWriter sw = new StreamWriter(path);
// тут запись

Здесь файл будет закрыт на следующей закрывающей блоко-скобке }.

Эти же самые фокусы следует применять и при чтении файла.

→ Ссылка