我基本上是试图在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();
}
您可能应该重组这两个进程,以便文件更改进程在完成更改文件后触发一个事件,而ftp上载进程应通过循环和比较校验和值来停止强制其进入(只是让它处于休眠状态并等待文件完成信号)。这种方法将提高您应用的性能,作为奖励(除了您需要的准确性外)。
[除此之外,也许尝试使用FileSystemWatcher类。您只能过滤修改事件。