Error reading file to array

I get the following error on the second iteration of my loop:
Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.

and this is my loop

  FileStream fs = new FileStream("D:\\06.Total Eclipse Of The Moon.mp3", FileMode.Open); byte[] _FileName = new byte[1024]; long _FileLengh = fs.Length; int position = 0; for (int i = 1024; i < fs.Length; i += 1024) { fs.Read(_FileName, position, Convert.ToInt32(i)); sck.Client.Send(_FileName); Thread.Sleep(30); long unsend = _FileLengh - position; if (unsend < 1024) { position += (int)unsend; } else { position += i; } } fs.Close(); } fs.Length = 5505214 
+6
source share
1 answer

In the first iteration, you call

 fs.Read(_FileName, 0, 1024); 

This is good (although why you are calling Convert.ToInt32 on an int , I don't know.)

In the second iteration you will call

 fs.Read(_FileName, position, 2048); 

which tries to read into the _FileName byte _FileName starting at position (which is nonzero) and retrieves up to 2048 bytes. The byte array is only 1024 bytes long, so it cannot work.

Additional issues:

  • You did not use the using statement, so on exceptions you will leave the stream open
  • You ignore the return value from Read , which means that you do not know how much of your buffer was actually read.
  • You unconditionally send the socket a full buffer, regardless of how much has been read.

Your code should probably look something like this:

 using (FileStream fs = File.OpenRead("D:\\06.Total Eclipse Of The Moon.mp3")) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0) { sck.Client.Send(buffer, 0, bytesRead); // Do you really need this? Thread.Sleep(30); } } 
+12
source

Source: https://habr.com/ru/post/898616/


All Articles