2012-09-06 214 views
0

我试图实现一个Windows服务应用程序,它从FTP服务器下载文件并将它们保存到数据库中指定的网络驱动器位置。 网络共享文件夹授予完全访问“所有人”从FTP服务器下载文件到网络驱动器

bool status = true; 
string webError = string.Empty; 
FtpWebResponse response = null; 
Stream ftpStream = null; 
FileStream outputStream = null; 
FtpDownloadToFolder = @"\\servername\SharedFolder\"; 
fileName = "test.jpg"; 

FtpWebRequest reqFTP = WebRequest.Create(new Uri(FtpAddress + "/" + fileName)) as FtpWebRequest; 
reqFTP.Credentials = new NetworkCredential(FtpUser, FtpPassword); 
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; 
reqFTP.UseBinary = true; 
reqFTP.Timeout = FtpTimeout; 
response = reqFTP.GetResponse() as FtpWebResponse; 
ftpStream = response.GetResponseStream(); 

if (!FtpDownloadToFolder.EndsWith("\\")) 
{ 
    FtpDownloadToFolder = FtpDownloadToFolder + "\\"; 
} 
outputStream = new FileStream(FtpDownloadToFolder + "/" + fileName, FileMode.Create); 

long cl = response.ContentLength; 
int bufferSize = 2048; 
byte[] buffer = new byte[bufferSize]; 
int readCount = ftpStream.Read(buffer, 0, bufferSize); 

while (readCount > 0) 
{ 
    outputStream.Write(buffer, 0, readCount); 
    readCount = ftpStream.Read(buffer, 0, bufferSize); 
} 

所以,在这里我想下载FTP服务器上文件到网络驱动器。但我得到以下错误:

Access to the path '\\servername\SharedFolder\test.jpg' is denied. 

System.Net.WebException: The remote server returned an error: 150 0.066 seconds (measured here), 3.78 Mbytes per second 
---> System.IO.IOException: The operation is not allowed on non-connected sockets. 
    at System.Net.Sockets.NetworkStream.InitNetworkStream(Socket socket, FileAccess Access) 
    at System.Net.Sockets.NetworkStream..ctor(Socket socket, Boolean ownsSocket) 
    at System.Net.FtpControlStream.QueueOrCreateFtpDataStream(Stream& stream) 
    at System.Net.FtpControlStream.PipelineCallback(PipelineEntry entry, ResponseDescription response, Boolean timeout, Stream& stream) 
    at System.Net.CommandStream.PostReadCommandProcessing(Stream& stream) 
    at System.Net.CommandStream.PostSendCommandProcessing(Stream& stream) 
    at System.Net.CommandStream.ContinueCommandPipeline() 
    at System.Net.CommandStream.CheckContinuePipeline() 
    --- End of inner exception stack trace --- 
    at System.Net.FtpWebRequest.CheckError() 
    at System.Net.FtpWebRequest.SyncRequestCallback(Object obj) 
    at System.Net.CommandStream.Abort(Exception e) 
    at System.Net.CommandStream.CheckContinuePipeline() 
    at System.Net.FtpDataStream.System.Net.ICloseEx.CloseEx(CloseExState closeState) 
    at System.Net.FtpDataStream.Dispose(Boolean disposing) 
    at System.IO.Stream.Close() 
    at System.Net.FtpWebResponse.Close() 

我在这里失去了一些东西?如何将文件从FTP服务器复制到网络共享文件夹中?

+2

该服务在哪个帐户下运行? –

+0

你是否检查过每个人都可以访问文件夹共享和目录(NTFS权限)? – Robert

+0

是的,我忘了更改服务进程安装程序的帐户类型..谢谢大家 – devphil

回答

0

通常,您的服务将在仅位于本地主机上的帐户下运行。因此,它不是从您的网络上经过身份验证的帐户运行的。只需更改该服务正在运行的帐户,以确保它是来自网络AD的帐户,因此它将成为您所指的所有人组的一部分。

+0

Got it!谢谢! – devphil

相关问题