我正在尝试复制一些文件:
private void DoCopy() {
string[] files = Directory.GetFiles(Application.StartupPath + "\\App_Data", "*.*", SearchOption.AllDirectories);
string sFtpToReadFileFrom = "ftp://<user>:<pass>@mysite.tk/updates/App_Data/";
string sPathToWriteFileTo = Application.StartupPath + "\\App_Data";
WebClient webClient = new WebClient();
webClient.Credentials = new NetworkCredential("user", "pass");
foreach (string s in files)
{
string fileName = Path.GetFileName(s);
string destFile = Path.Combine(sPathToWriteFileTo, fileName);
byte[] fileData = webClient.DownloadData(sFtpToReadFileFrom + fileName); //shows correct bytes
File.Copy(s, destFile, true);
}
}
确切的错误是:进程无法访问文件'C:\ AppLauncher \ AppLauncher \ bin \ Debug \ App_Data \ firstFile',因为它正由另一个进程使用。
我在这里关注了'MSDN How To':http://msdn.microsoft.com/en-us/library/cc148994.aspx
如果有人发现任何即时危险信号,请告诉我。
答案 0 :(得分:0)
这就是我的看法:
您想从FTP服务器下载文件并将其写入本地磁盘。 你正在做的是将源目录中的文件作为目标,这根本不起作用。如果文件已存在,那么如果你可以在那里获取文件名,他们就会这样做。 (因此例外)
这是你必须做的事情
连接到FTP,获取那里的文件(它们的字节),然后在磁盘上创建文件。
private void DoCopy() {
//string[] files = Directory.GetFiles(Application.StartupPath + "\\App_Data", "*.*", SearchOption.AllDirectories);
//Acquire filenames from FTP-Server instead of local disk!
string sFtpToReadFileFrom = "ftp://<user>:<pass>@mysite.tk/updates/App_Data/";
string sPathToWriteFileTo = Application.StartupPath + "\\App_Data";
WebClient webClient = new WebClient();
webClient.Credentials = new NetworkCredential("user", "pass");
foreach (string s in files)
{
string fileName = Path.GetFileName(s); //create file names based on FTP-server
string destFile = Path.Combine(sPathToWriteFileTo, fileName);
byte[] fileData = webClient.DownloadData(sFtpToReadFileFrom + fileName); //shows correct bytes
//File.Copy(s, destFile, true); Rather use File.WriteAllBytes
File.WriteAllBytes(destFile, fileData);
}
}
有关File.WriteAllBytes
的示例,请参阅here。
从FTP获取文件名并不是那么简单。有FtpWebRequest
- 类来支持你。