title: How to remove contents of one csv file from another in C#
body: <p>I have 2 csv files, file1.csv and file2.csv. Some lines in each file will be identical. I wish to create a 3rd csv file, based upon file2.csv but with any lines that are present in file1.csv removed from it. Effectively I wish to subtract file1.csv from file2.csv ignoring any lines present in file1 that are not in file2.
  I know that I could use streamreader to read each line in file2.csv and search for it in file1.csv. If it does not exist in file1.csv I can write it to file3.csv. However, the files are very large (over 30000 lines) and I believe this would take a lot of processing time.
  I suspect there may be a better method of loading each csv to an array and then performing a simple subtraction function on them to obtain the desired result. I would appreciate either some help with the code or on method that I should approach this problem with.</p>
  
  <p>Example content of files:</p>
  
  <p>file1.csv</p>
  
  <pre><code>dt97861.jpg,149954,c1714ee1,\folder1\folderA\,
  dt97862.jpg,149955,c1714ee0,\folder1\folderA\,
  dt97863.jpg,59368,cd23f223,\folder2\folderA\,
  dt97864.jpg,57881,0835be4a,\folder2\folderB\,
  dt97865.jpg,57882,0835be4b,\folder2\folderB\,
  </code></pre>
  
  <p>file2.csv</p>
  
  <pre><code>dt97862.jpg,149955,c1714ee0,\folder1\folderA\,
  dt97863.jpg,59368,cd23f223,\folder2\folderA\,
  dt97864.jpg,57881,0835be4a,\folder2\folderB\,
  dt97865.jpg,57882,0835be4b,\folder2\folderB\,
  dt97866.jpg,57883,0835be4c,\folder2\folderB\,
  dt97867.jpg,57884,0835be4d,\folder3\folderA\,
  dt97868.jpg,57885,0835be4e,\folder3\folderA\,
  </code></pre>
  
  <p>The results I require is:</p>
  
  <p>file3.csv</p>
  
  <pre><code>dt97866.jpg,57883,0835be4c,\folder2\folderB\,
  dt97867.jpg,57884,0835be4d,\folder3\folderA\,
  dt97868.jpg,57885,0835be4e,\folder3\folderA\,
  </code></pre>
  
  <p>EDIT:
  With the help below I came to the following solution which I believe to be nice and elegant:</p>
  
  <pre><code>public static IEnumerable&lt;string&gt; ReadFile(string path)
          {
              string line;
  
              using (var reader = File.OpenText(path))
                  while ((line = reader.ReadLine()) != null)
                      yield return line;
          }
  </code></pre>
  
  <p>then:</p>
  
  <pre><code>var file2 = ReadFile(file2FilePath);
  var file1 = ReadFile(file1FilePath);
  var file3 = file2.Except(file1);
  File.WriteAllLines(file3FilePath, file3);
  </code></pre>