2012-03-17 3 views
3

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

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

Любые идеи? Есть ли лучший способ 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; 
     } 
    } 

ответ

7

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.

+0

Спасибо, это полезно знать. Я отслеживаю код, и, похоже, проблема может быть целым числом, которое я передаю для работы. Я буду исследовать дальше. – TheEngineerer

+0

Благодарим за помощь. – TheEngineerer

+0

Хорошо, проблема получается глупо/тривиально. Я установил целое число в неправильное значение (задал его в шестнадцатеричном порядке, поставил то, что хотел, чтобы оно было десятичным.) Благодарим вас за сокращение кода. Очень ценим. – TheEngineerer

Смежные вопросы