Я хочу скопировать один файл из другого места, и я сделал код для этого, и он отлично работает на локальном компьютере, но проблема возникает на производстве. Каждый раз, когда я получаю сообщение об ошибке, как показано ниже.
Процессне удается получить доступ к файлу 'D: \ Websites \ test \ test.xyz.com \ App_Data \ GeoIP2-Country.mmdb', поскольку он используется другим процессом.в System.IO .__ Error.WinIOError (Int32 errorCode, String MaybeFullPath)
в System.IO.FileStream.Init (строковый путь, режим FileMode, доступ к FileAccess, права Int32, логические useRights, общий доступ к FileShare, буферный размер Int32, параметры3232, опции FileOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
в System.IO.FileStream..ctor (путь строки, режим FileMode, доступ к FileAccess, общий доступ к FileShare) в Nop.Services.DirectasDatabase.Direct.UpdateLocalMaxMindDb () в Nop.Services.Directory.UpdateMaxMindDatabaseTask.Execute (узел XmlNode) ,, IP =, CustomerId = unknown, Page =, Referrer =
Мой код для копирования файла приведен ниже.
try
{
if (File.Exists(localDbPath))
{
var lastModified = File.GetLastWriteTime(localDbPath);
if (sourceDbLastModified.Date > lastModified.Date)
{
UpdateLocalMaxMindDb();
}
}
}
catch (Exception e)
{
_logger.InsertLog(LogLevel.Error, "Error." + e, string.Empty, null);
}
public void UpdateLocalMaxMindDb()
{
try
{
var destinationPath = _webhelper.MapPath("~/App_Data");
string[] latestmmdb = System.IO.Directory.GetFiles(sourcePath, "*.mmdb");
// Copy mmdb files.
foreach (string f in latestmmdb)
{
// Remove path from the file name.
string fName = f.Substring(sourcePath.Length + 1);
string sourcefile = Path.Combine(sourcePath, fName);
string destinationfile = Path.Combine(destinationPath, fName);
int bufferSize = 1024 * 1024;
using (FileStream fileStream = new FileStream(destinationfile, FileMode.OpenOrCreate,
FileAccess.Write, FileShare.ReadWrite))
{
FileStream fs = new FileStream(sourcefile, FileMode.Open, FileAccess.ReadWrite);
fileStream.SetLength(fs.Length);
int bytesRead = -1;
byte[] bytes = new byte[bufferSize];
while ((bytesRead = fs.Read(bytes, 0, bufferSize)) > 0)
{
fileStream.Write(bytes, 0, bytesRead);
}
fileStream.Close();
fileStream.Dispose();
fs.Close();
fs.Dispose();
}
}
}
catch (DirectoryNotFoundException dirNotFound)
{
_logger.InsertLog(LogLevel.Error, "Error." + dirNotFound, string.Empty, null);
}
}