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