Как переместить данные из одного буфера в другой
привет,
На самом деле я работаю над стримером ,данные поступают с платы fx3
эти данные хранятся в буфере, из которого я копирую их в другой буфер, а затем сохраняю на ПК . поэтому я хочу сделать это для непрерывного сохранения данных без остановки стримера . Я хочу очистить буфер после копирования данных из этого буфера в другой буфер. функции, которые я пробовал, прилагаются ниже .Я надеюсь, что кто-то поможет разобраться в этой проблеме
Что я уже пробовал:
byte[] temp=new byte[100*1024*1024];
if (Save == true) //Check if save Button is marked { byte[] temp1 = new byte[Offset]; Buffer.BlockCopy(temp, 0, temp1, 0, Offset); // copy the contents received on temp[] to temp1[] string res = string.Join("", temp1); // Put all the data streamed to a single string string file_name = "C:\\user\\mady\\desktop\\myData.txt"; // Write the string to mady.txt System.IO.StreamWriter objWriter; objWriter = new System.IO.StreamWriter(file_name); objWriter.WriteLine(res); objWriter.Close(); }
Richard MacCutchan
Что такое исключение и где оно происходит? Кроме того, вы должны открыть StreamWriter
вне этого метода и держите его открытым до тех пор, пока не будет получено больше данных.
Member 13142768
на самом деле исключение происходит из-за того, что буфер может содержать только байт[100*1024*1024] поэтому я хочу очистить этот буфер после копирования в temp1, чтобы он постоянно получал данные от fx3.
Richard MacCutchan
Я подозреваю, что более вероятно, что ваш индекс в буфере выходит за свой предел. Вам нужно сбросить значение offset
каждый раз, когда вы копируете данные из буфера.
В вашей рутине выше много избыточного кода. Зачем вам нужно копировать данные из одного буфера в другой, а затем создавать из них строку, просто чтобы записать ее в файл? Почему бы просто не написать прямо из исходного буфера? Вы знаете, сколько данных нужно записать и с чего они начинаются.
Member 13142768
да, он превышает лимит при запуске операции. Итак, чтобы предотвратить это
я хочу переместить данные из буфера, если мне это нравится, то это означает, что буфер будет свободен каждый раз, так что он может работать в течение длительного времени .любое предложение сделать это, если я прав, еще может немного помочь мне.
Richard MacCutchan
Как я уже сказал, вам нужно сбросить индекс буфера, как только вы запишете данные в файл.
Member 13142768
но данные будут скопированы, если я нажму только кнопку "стоп". как обойтись без нажатия кнопки стоп какую функцию мне нужно использовать для сброса буфера
если вы можете иметь в виду, что это будет полезно для меня
Richard MacCutchan
Вам просто нужно переписать свой код так, чтобы он не нуждался в кнопке остановки, а продолжал читать и писать. Что-то вроде:
Open the binary writer output file
Start reading into the byte buffer.
When you have enough data, or the device stops sending, then
write the buffer to the stream
reset the data pointer to the beginning of the buffer
If more data still to process then go back to start reading
Else
Close the stream file and finish.