Заменить один байт на 3 в C # FileStream - PullRequest
0 голосов
/ 22 сентября 2018

Я просматриваю файл и создаю из него CSV.У меня есть разделитель столбцов, но я не уверен, как заменить один байт на три.

    public static FileStream stream = new FileStream(@"test.dat", FileMode.Open, FileAccess.Read);
    public static FileStream shortFile = null;
    int limit = 3000;

    public MainWindow()
    {
        byte[] block = new byte[limit];
        using (FileStream fs = File.Create("tempfile.dat"))
        {
            stream.Position = 205000000;
            stream.Read(block, 0, limit);
            Console.WriteLine(Encoding.Default.GetString(block));
            File.WriteAllText("test.dat", Regex.Replace(Encoding.Default.GetString(block), "[\x00]{2,}", ""));

            for (int i = 0; i < block.Length; i++)
            {
                if (block[i] == 0x10)
                {
                    block[i] = ???;//// If I wanted to insert a "," here, how would I do that?
                }
            }
        InitializeComponent();
    }

Комментарии в коде

1 Ответ

0 голосов
/ 22 сентября 2018

Есть несколько проблем с вашим кодом, и в конце я бы выбрал другой подход

  1. public static FileStream stream, и public static FileStream shortFile непривычно удерживать FileStreamкак это и особенно в статическом поле.Я бы посоветовал поместить все потоки, которые содержат дескрипторы, в неуправляемые ресурсы в блоке using, если это возможно.

  2. У вас есть весь код до загрузки MainWindow (в конструкторе).Если это дорогостоящий процесс, он заблокирует загрузку вашей формы, также, если есть исключение, его сложнее обрабатывать.также вы не сможете легко заставить этот код использовать асинхронный / ожидающий шаблон

  3. Вы не можете легко вставить дополнительные элементы в массив, вам обычно нужно выделить новый массив, скопировать, вставьте, скопируйте, чтобы добиться этого.

  4. Вы, похоже, имеете дело с байтами и строками одновременно.Если вы имеете дело с текстовым файлом, то лучше использовать классы, которые уже имеют в виду юникод.

  5. И я думаю, что это самый важный.Если вы действительно хотите создать файл CSV, сэкономьте много времени и усилий и используйте выделенную библиотеку CSV ... Прочитайте исходный файл, добавьте его в столбцы и строки, затем сохраните.

...