2014-05-21 6 views
0

다음 코드를 사용하여 파일의 일부를 삭제했습니다. 메소드의 매개 변수는 filePath 및 각 위치에서 삭제할 길이와 함께 위치 목록입니다.C#에서 파일에서 행을 삭제하는 방법

내가 제대로하고 있는지 확인해주세요. 감사합니다

참고 : 삭제할 부분은 겹치지 않습니다. 그래서 나는 그것에 대한 수표를 추가하지 않았다.

static void DeleteFileParts(string filePath, List<Tuple<int, int>> T) 
    { 
     using (var fileStream = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite)) 
     { 
      int tLen = 0; 
      int lastWriteL = 0; 
      int len = (int)fileStream.Length; 
      byte[] b1 = new byte[len]; 
      for (int i = 0; i < T.Count; i++) 
      { 
       Tuple<int, int> t = T[i]; 
       tLen += t.Item2; 

       fileStream.Seek(t.Item1 + t.Item2, 0); 

       int b1Len = i == T.Count - 1 ? (len - t.Item1 - t.Item2) : (T[i + 1].Item1 - t.Item1 - t.Item2); 
       fileStream.Read(b1, 0, b1Len); 

       fileStream.Seek(lastWriteL == 0 ? t.Item1 : lastWriteL, 0); 
       fileStream.Write(b1, 0, b1Len); 

       lastWriteL += t.Item1 + b1Len; 
      } 

      fileStream.SetLength(len - tLen); 
     } 
    } 
+0

를, 아마 코드 검토 SE – BradleyDotNET

답변

1

당신은 Read 방법의 잘못을 사용하고 (하지만 당신은 혼자가 아닙니다, 그것은 매우 일반적이다).

Read 메서드는 사용자가 요청한 바이트 수만큼 읽는다고 보장하지 않습니다. 그것의 일부만 읽을 수도 있고 실제로 버퍼에 넣은 바이트 수를 반환합니다. 당신은 그 반환 값을 사용하고, 당신은 당신이 필요로하는 모든 바이트 때까지 읽기를 계속해야합니다 :이 코드를 작동하면

int len = 0; 
while (len < b1Len) { 
    len += fileStream.Read(b1, len, b1Len - len); 
} 
+0

확인 Guffa..thanks에 더 적합 할 것 –

관련 문제