Как скопировать файл из одного места в другое на рабочем сервере? - PullRequest
0 голосов
/ 17 апреля 2019

Я хочу скопировать один файл из другого места, и я сделал код для этого, и он отлично работает на локальном компьютере, но проблема возникает на производстве. Каждый раз, когда я получаю сообщение об ошибке, как показано ниже.

Процессне удается получить доступ к файлу '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);
        }


    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...