C\#FileStream 큰 파일 복사 기능
3137 단어 C#FileStream복제 하 다.
FileStream 에서 파일 을 읽 을 때 는 먼저 스 트림 을 메모리 에 넣 고 Flash()방법 을 거 쳐 메모리 에 있 는 데 이 터 를 파일 에 기록 합 니 다.만약 파일 이 매우 크다 면 반드시 성능 을 소모 할 것 이다.불 시의 수요 에 대비 하여 FileHelper 에 특별히 밀봉 하 다.강제 형식 변환,예 를 들 어 4G 와 같은 파일 이 크 면 넘 치 는 상황 이 발생 하고 복사 한 결과 바이트 가 심각하게 분실 되 어 복사 파일 과 원본 파일 의 크기 가 다 릅 니 다.여기 서 수 정 된 코드 는 다음 과 같 습 니 다.
public static class FileHelper
{
/// <summary>
///
/// </summary>
/// <param name="fromPath"> </param>
/// <param name="toPath"> </param>
/// <param name="eachReadLength"> </param>
/// <returns> </returns>
public static bool CopyFile(string fromPath, string toPath, int eachReadLength)
{
//
FileStream fromFile = new FileStream(fromPath, FileMode.Open, FileAccess.Read);
//
FileStream toFile = new FileStream(toPath, FileMode.Append, FileAccess.Write);
//
int toCopyLength = 0;
//
if (eachReadLength < fromFile.Length)
{
byte[] buffer = new byte[eachReadLength];
long copied = 0;
while (copied <= fromFile.Length - eachReadLength)
{
toCopyLength = fromFile.Read(buffer, 0, eachReadLength);
fromFile.Flush();
toFile.Write(buffer, 0, eachReadLength);
toFile.Flush();
//
toFile.Position = fromFile.Position;
copied += toCopyLength;
}
int left = (int)(fromFile.Length - copied);
toCopyLength = fromFile.Read(buffer, 0, left);
fromFile.Flush();
toFile.Write(buffer, 0, left);
toFile.Flush();
}
else
{
//
byte[] buffer = new byte[fromFile.Length];
fromFile.Read(buffer, 0, buffer.Length);
fromFile.Flush();
toFile.Write(buffer, 0, buffer.Length);
toFile.Flush();
}
fromFile.Close();
toFile.Close();
return true;
}
}
테스트 코드:
class Program
{
static void Main(string[] args)
{
Stopwatch watch = new Stopwatch();
watch.Start();
if (FileHelper.CopyFile(@"D:\ \ \SQLSVRENT_2008R2_CHS.iso", @"F:\SQLSVRENT_2008R2_CHS.iso", 1024 * 1024 * 5))
{
watch.Stop();
Console.WriteLine(" , :" + watch.Elapsed.Seconds + " ");
}
Console.Read();
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.