C#-Can';当文件被另一个程序写入时,不要将文件上载到FTP服务器

C#-Can';当文件被另一个程序写入时,不要将文件上载到FTP服务器,c#,.net,file,ftp,network-programming,C#,.net,File,Ftp,Network Programming,我基本上是试图在我的电脑上跟踪一个特定的文件,每当文件的内容发生变化时,它都应该上传到我的FTP服务器上。我面临的问题是,当另一个进程正在写入文件时,它不允许我上传到FTP服务器。我已经尝试了一切,包括在管理员等打开,但这个错误(550权限被拒绝)来自FTP服务器 这是我的密码: public static void Trace() { string checksum = ""; while (true)

我基本上是试图在我的电脑上跟踪一个特定的文件,每当文件的内容发生变化时,它都应该上传到我的FTP服务器上。我面临的问题是,当另一个进程正在写入文件时,它不允许我上传到FTP服务器。我已经尝试了一切,包括在管理员等打开,但这个错误(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();
        }

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


除此之外,可以尝试使用FileSystemWatcher类。您只能筛选修改事件。

是您需要集成的代码。。。事实上,您需要编写数据的程序的合作,并希望“仅追加”写入。问题是1进程不是我代码的一部分。这是一个我无法控制的外部过程。此外,读取文件本身也可以正常工作。问题是当我试图通过FileStream将其上载到FTP服务器时。我认为它不允许在文件被另一个进程写入时上载文件,但不确定究竟是什么导致了此错误,因为如果我不将其上载到FTP,我的程序工作正常。能否将uploadfile1方法包装在try catch中,记录错误(例如ToString()),把所有的东西都贴在你问题的底部。我现在发现了错误。这是因为我获取当前时间的方法被破坏了,总是用相同的文件名上传文件,FTP服务器不允许覆盖。