Переглянути джерело

优化大文件二次读取被占用问题。

final
曾凯 4 місяці тому
джерело
коміт
57ca3d95ef
1 змінених файлів з 24 додано та 8 видалено
  1. +24
    -8
      CnasSynchronusClient/RemoteFileCopy.cs

+ 24
- 8
CnasSynchronusClient/RemoteFileCopy.cs Переглянути файл

@@ -163,9 +163,12 @@ namespace CnasSynchronusClient
AppLog.Error("CopyFileFromRemote dst 打印日志 " + dst);
AppLog.Error("CopyFileFromRemote fileName 打印日志 " + fileName);

FileStream inFileStream = null;
FileStream outFileStream = null;

try
{
FileStream inFileStream = new FileStream(src, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
inFileStream = new FileStream(src, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
if (!Directory.Exists(dst))
{
Directory.CreateDirectory(dst);
@@ -173,23 +176,36 @@ namespace CnasSynchronusClient
dst = Path.Combine(dst, fileName);
AppLog.Error("CopyFileFromRemote dst 打印日志 " + dst);

FileStream outFileStream = new FileStream(dst, FileMode.OpenOrCreate);
byte[] buf = new byte[inFileStream.Length];
if (true == File.Exists(dst))
{
try
{
File.SetAttributes(dst, FileAttributes.Normal);
File.Delete(dst);
}
catch { }
}

outFileStream = new FileStream(dst, FileMode.Create);
byte[] buf = new byte[1024];
int byteCount;
while ((byteCount = inFileStream.Read(buf, 0, buf.Length)) > 0)
{
outFileStream.Write(buf, 0, byteCount);
}
inFileStream.Flush();
inFileStream.Close();
outFileStream.Flush();
outFileStream.Close();
outFileStream?.Flush();
}
catch (Exception ex)
{
AppLog.Error(ex.Message);
}
finally
{
inFileStream?.Close();
inFileStream?.Dispose();
outFileStream?.Close();
outFileStream?.Dispose();
}
}
}
}

Завантаження…
Відмінити
Зберегти