阻止其他进程访问相同的ftp流

时间:2015-01-29 02:31:05

标签: c# ftp stream

我试图弄清楚当我还在从其他进程/计算机写入ftp时,如何阻止访问同一个ftp流。

这是我尝试的代码:

    internal static bool WriteFileToServer(string urlToWriteOn, string strAllContent)
    {
        Uri ServerUri = new Uri(urlToWriteOn);
        if (ServerUri.Scheme != Uri.UriSchemeFtp)
            return false;

        // Get the object used to communicate with the server.
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ServerUri);
        request.Method = WebRequestMethods.Ftp.UploadFile;
        byte[] ContentsToWrite = Encoding.UTF8.GetBytes(strAllContent);
        request.ContentLength = ContentsToWrite.Length;

        request.Credentials = new NetworkCredential(UserID, Password);
        request.UsePassive = false;
        request.KeepAlive = false;
        Stream requestStream = request.GetRequestStream();
        requestStream.Write(ContentsToWrite, 0, ContentsToWrite.Length);

        System.Threading.Thread.Sleep(10000);

        requestStream.Close();
        FtpWebResponse response = (FtpWebResponse)request.GetResponse();

        response.Close();
        return true;
    }

我创建了两个同时访问该函数的线程,并且在写入ftp(关闭部分之前)之后,它们都停留在睡眠行中。 对于测试,第一个线程写入10,000行,第二个线程写入500行。

实际上,第一个线程是在ftp上创建新文件并写入所有行,然后是另一个线程并在前500行重写(第一个线程中的其他9,500行保持存在) 我希望从第二个线程抛出异常,但不是。 如果写入ftp的代码来自同一个应用程序,我正在解决这个问题,但是它将从2台不同的计算机编写而我不希望其他计算机同时写入ftp文件

1 个答案:

答案 0 :(得分:0)

我不相信你希望从客户端完成任务。我的猜测是,更好的方法是写入“随机”文件名或带有“.inprogress”扩展名或类似名称,然后在上传完成后重新命名文件。