C# - Невозможно загрузить файл на FTP-сервер, пока файл записывается другой программой - PullRequest
0 голосов
/ 29 февраля 2020

Я в основном пытаюсь отследить указанный файл c на моем P C, и всякий раз, когда изменяется содержимое файла, он должен быть загружен на мой FTP-сервер. Проблема, с которой я сталкиваюсь, заключается в том, что она не позволяет загружать файлы на FTP-сервер, пока файл в данный момент записывается другим процессом. Я перепробовал все, включая открытие в Administrator et c, но эта ошибка (550 Permission denied) исходит от FTP-сервера.

Вот мой код:

public static void Trace()
            {
                string checksum = "";
                while (true)
                {
                    if (CheckMd5(Path) != checksum)
                    {
                        UploadFile1();

                    }

                    checksum = CheckMd5(Path);
                    Thread.Sleep(5000);
                }
            }

            public static void UploadFile1()
            {
                var ftp1 = new myFTP();
                if (!File.Exists(Path))

                {

                }
                else
                {
                    var currentTime = CurrentTime; // gets the current time
                    ftp1.UploadFile(Path, timeRn);
                }
            }

 public void UploadFile(string filePath, string CurrentTime)
        {
            FtpWebRequest request =
                (FtpWebRequest)WebRequest.Create("ftp://127.0.0.1/" + CurrentTime);
            request.Method = WebRequestMethods.Ftp.UploadFile;
            request.Credentials = new NetworkCredential("user", "password");
            request.UsePassive = true;
            request.UseBinary = true;
            request.KeepAlive = false;
            request.EnableSsl = false;


            FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            byte[] buffer = new byte[stream.Length];

            stream.Read(buffer, 0, buffer.Length);
            stream.Close();

            Stream reqStream = request.GetRequestStream();
            reqStream.Write(buffer, 0, buffer.Length);
            reqStream.Close();
        }

1 Ответ

0 голосов
/ 29 февраля 2020

Вероятно, вам следует реструктурировать эти 2 процесса, чтобы процесс изменения файла вызывал событие после того, как он завершил изменение файла, в то время как процесс загрузки ftp должен прекратить форсирование, зацикливаясь и сравнивая значения контрольной суммы (просто оставьте его в покое). дремлю и дождемся сигнала готового файла). Такой подход улучшит производительность вашего приложения в качестве бонуса (помимо необходимой вам точности).

Помимо этого, возможно, попробуйте использовать класс FileSystemWatcher. Вы можете фильтровать только для событий модификации.

...