Файловый поток создает или добавляет проблему - PullRequest
3 голосов
/ 17 марта 2012

У меня проблемы с FileStreams.Я нахожусь в процессе написания последовательного интерфейса C # для проекта FPGA, над которым я работаю, который получает пакет (содержащий 16 байтов), создает и записывает байты в файл и затем добавляет его в созданный файл.

Программа не выдает никаких ошибок, но, похоже, не прошла процедуру создания файла и не записывает в него никаких данных.

Есть идеи?Есть ли лучший способ OpenOrAppend файл?

Заранее спасибо, Майкл

    private void SendReceivedDataToFile(int sendBytes)
    {
        if (saveFileCreated == false)
        {
            FileStream writeFileStream = new FileStream(tbSaveDirectory.Text, FileMode.Create);
            writeFileStream.Write(oldData, 0, sendBytes);
            writeFileStream.Flush();
            writeFileStream.Close();
            saveFileCreated = true;
            readByteCount = readByteCount + sendBytes;
        }
        else
        {
            using (var writeFilestream2 = new FileStream(tbSaveDirectory.Text, FileMode.Append))
            {
                writeFilestream2.Write(oldData, 0, sendBytes);
                writeFilestream2.Flush();
                writeFilestream2.Close();
                readByteCount = readByteCount + sendBytes;
            }
        }

        if (readByteCount == readFileSize)                     // all data has been recieved so close file.
        {
            saveFileCreated = false;
        }
    }

1 Ответ

7 голосов
/ 17 марта 2012

FileMode.Append уже означает «создать или добавить», так что на самом деле вам нужна только часть else {} вашего if. Вам также не нужно звонить Flush() или Close() - утилизация потока сделает это за вас. Не уверен насчет записи данных ... Вы пытались отследить свой код?

Итак, сначала я бы уменьшил ваш код до

private void SendReceivedDataToFile(int sendBytes)
{
    using (var fs = new FileStream(tbSaveDirectory.Text, FileMode.Append))
        fs.Write(oldData, 0, sendBytes);
    readByteCount += sendBytes;
}

затем попытайтесь выяснить, что именно в oldData.

...