C#-当文件正在被另一个程序写入时,无法将文件上传到FTP服务器

问题描述 投票:0回答:1

我基本上是试图在PC上跟踪特定文件,并且只要文件内容更改,就应将其上载到我的FTP服务器。我面临的问题是,当文件正在由另一个进程写入时,它不会让我上传到FTP服务器。我已经尝试了所有方法,包括在Administrator中打开等,但是此错误(550权限被拒绝)来自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();
        }
c# .net file ftp network-programming
1个回答
0
投票

您可能应该重组这两个进程,以便文件更改进程在完成更改文件后触发一个事件,而ftp上载进程应通过循环和比较校验和值来停止强制其进入(只是让它处于休眠状态并等待文件完成信号)。这种方法将提高您应用的性能,作为奖励(除了您需要的准确性外)。

[除此之外,也许尝试使用FileSystemWatcher类。您只能过滤修改事件。

© www.soinside.com 2019 - 2024. All rights reserved.