file io - Random lines not being written from streamwriter C# -


i working on fixing issue legacy code. code reads csv, checks data validity, writes document outfile.

i having difficulty determining reason process being hung up. stuck in infinite loop. issue happens on same line every time (line 262). have removed line , runs line 1885 because getting hung again. continued remove lines causing issues on file , test file. weird errorline file ran fine when in file. makes me think issue must coming streamwriter.

i have streamwriter set autoflush = true. using using block should handle flush/close of streamwriter.

the files come in number of different sizes, handful of rows , several thousand rows.

foreach (string e in filenames)                 {                      using (streamwriter sw = new streamwriter(e.replace(inputdirectory, outputdirectory), false, encoding.unicode))                     {                         sw.autoflush = true;                         using (streamreader sr = new streamreader(e,encoding.unicode))                         {                             int peek = sr.peek();                             while (peek > -1)                              {                                 if (((char)peek).equals(textqual))                                          {                                             sw.write(((char)sr.read()));                                             peek = sr.peek();                                             if (((char)peek).equals(textqual2))                                             {                                                 sw.write(((char)sr.read()));                                                  peek = sr.peek();                                                 while (peek > 1)                                                 {                                                     if (((char)peek).equals((char)0x0a) || ((char)peek).equals((char)0x0d))                                                      {                                                         check = false;                                                          row++;                                                         if (firstcol == 0)                                                         {                                                             firstcol = col;                                                         }                                                         col = 0;                                                          break;                                                     }                                                     else if (((char)peek).equals(del))                                                      {                                                         check = false;                                                          break;                                                     }                                                     else if (((char)peek).equals((char)0x22))                                                     {                                                         sr.read();                                                         doubleq++;                                                     }                                                      else                                                     {                                                         sw.write(((char)sr.read()));                                                         peek = sr.peek();                                                         break;                                                     }                                                 }                                              }                             } 

i looking suggestions issue not sure coming from.

you in infinite loop due while (peek > -1) wich evaluate true (if strream contains @ least 1 character).

correct code this:

int peek = 0; while ( (peek = sr.peek ()) > -1) {     char c = (char)peek;    // doe whatever want picked character      sr.read ();   } 

in oppinion dangerous code because there cases when while can run forever. example, if statement:

if (((char)peek).equals(textqual))  

above, if first character not equal textqual while run forever. not mentioning can happen characters read further.

above piece of code wouldn't recommend put in production.


Comments

Popular posts from this blog

javascript - Using jquery append to add option values into a select element not working -

Android soft keyboard reverts to default keyboard on orientation change -

Rendering JButton to get the JCheckBox behavior in a JTable by using images does not update my table -