首页 新闻 会员 周边

c# 上传文件到FTP服务器,遇到神问题。请各位大神帮忙!!!

0
悬赏园豆:10 [待解决问题]

自己用winform写了一个小功能上传文件到ftp服务器,功能都很好用,但是把代码合并到实际工程后,代码没报异常,但是FTP服务器上就是没有生成好的文件,实在是不知道问题方向,请了解的大神给点方向。谢谢。

Baby爱薇儿的主页 Baby爱薇儿 | 初学一级 | 园豆:66
提问于:2015-09-17 16:47
< >
分享
所有回答(2)
0

你要是把异常都吃掉了,当然不会报告异常了。

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-09-17 17:03

但是我每个方法,都有try catch啊。 把异常都吃掉了 是什么意思啊? 那怎么能吐出来?

支持(0) 反对(0) Baby爱薇儿 | 园豆:66 (初学一级) | 2015-09-17 17:06

相同的代码  自己写的小程序 就好是,但是放到实际工程中就不好用。

支持(0) 反对(0) Baby爱薇儿 | 园豆:66 (初学一级) | 2015-09-17 17:07

@Baby爱薇儿: 你每个方法都有Try catch,出错会显示吗?吃掉的意思就是给你

Try... Catch掉了。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2015-09-17 17:26

@爱编程的大叔: 那应该怎么弄,才能把问题抛出来呢?要是错误,catch 不是可以抛出来吗。本人小白,码字没多久,有些问题不太懂。请大叔指教。谢谢。

支持(0) 反对(0) Baby爱薇儿 | 园豆:66 (初学一级) | 2015-09-17 17:28

@Baby爱薇儿: 你这么说没法知道你咋写的,贴一段代码看看

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2015-09-17 23:28

@爱编程的大叔: 全部代码了。

private void button1_Click(object sender, EventArgs e)
{
try
{

string filepath = @"E:\C#Test\Test2\";

string FTPfilepath = "ftp://192.168.1.1/TestXML/";
string ftpUserName = "xx";
string ftpPassWord = "xx";

StringBuilder xmlResult = new StringBuilder();

#region 拼接上传XML
xmlResult.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?> \r\n");

xmlResult.Append("</ShipOrder>");

 

//设置文件名称
string filename = DateTime.Now.ToString("yyyyMMddHHmmss");

 

using (StreamWriter sw = new StreamWriter(filepath + filename + ".xml", false, Encoding.GetEncoding("utf-8")))
{

sw.Write(xmlResult);
sw.Close();

}

 

#region 获取本地文件夹下所有文件名称
DirectoryInfo di = new DirectoryInfo(filepath);

//获取子文件夹列表
di.GetDirectories();
//获取文件列表
di.GetFiles();

 

for (int i = 0; i < di.GetFiles().Length; i++)
{
UpFileToFTP(ftpUserName, ftpPassWord, filepath + di.GetFiles()[i].ToString(), FTPfilepath + di.GetFiles()[i].ToString());

}

 


}
catch (Exception ex)
{
throw ex;
}
}

 

/// <summary>
/// 上传文件到FTP实现
/// </summary>
/// <param name="ftpUser">FTP用户名</param>
/// <param name="ftpPassWord">FTP密码</param>
/// <param name="filePath">文件本地路径</param>
/// <param name="FTPfilePath">文件FTP路径</param>
public void UpFileToFTP(string ftpUser, string ftpPassWord, string filePath, string FTPfilePath)
{
WebClient request = new WebClient();

request.Credentials = new NetworkCredential(ftpUser, ftpPassWord);

FileStream myStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
byte[] dataByte = new byte[myStream.Length];
myStream.Read(dataByte, 0, dataByte.Length); //写到2进制数组中
myStream.Close();
Uri uri = new Uri(FTPfilePath);
request.UploadDataAsync(uri, "STOR", dataByte, dataByte);
}

支持(0) 反对(0) Baby爱薇儿 | 园豆:66 (初学一级) | 2015-09-18 10:02
0

本地可以吗?本地的开发环境和服务器上的环境是否一致呢?必要的时候可以贴点代码!先检查下有可能出事儿的模块!

大楚打码人 | 园豆:4313 (老鸟四级) | 2015-09-17 17:12

代码都在本地,只是一个是自己写的,一个是项目,自己写的没问题,就是项目出问题。所以没有头绪,不知道该怎么查找。

支持(0) 反对(0) Baby爱薇儿 | 园豆:66 (初学一级) | 2015-09-17 17:14

@Baby爱薇儿: 整合得有问题吧!wait  wait  wait……你是把自己写的功能整合到了项目里还是,你的是什么项目?cs的?

支持(0) 反对(0) 大楚打码人 | 园豆:4313 (老鸟四级) | 2015-09-17 17:16

@贫民窟大侠: 在同一个项目里、同一套代码,只是连接地址、用户名、密码不同,我上传文件到我用我自己电脑搭建的FTP就可以上传成功,但是我连接公司的FTP服务器就不成功。

但是同样的连接地址,我在我自己写的小程序中不管是连接我自己的,还是公司的,都可以上传成功。

支持(0) 反对(0) Baby爱薇儿 | 园豆:66 (初学一级) | 2015-09-17 17:22

@Baby爱薇儿: 会不会是文件夹权限或者用户权限所致呢!不同的用户不同的权限。

支持(0) 反对(0) 大楚打码人 | 园豆:4313 (老鸟四级) | 2015-09-17 17:24

@贫民窟大侠: 同一个用户,自己弄的就没问题,项目就有问题。所及我还是觉得项目,或者FTP 设置的问题。

支持(0) 反对(0) Baby爱薇儿 | 园豆:66 (初学一级) | 2015-09-17 17:26

@Baby爱薇儿: 嗯。应该是FTP设置的问题。

支持(0) 反对(0) 大楚打码人 | 园豆:4313 (老鸟四级) | 2015-09-17 17:29

@贫民窟大侠: 自己代码 上传公司FTP 就可以,但是项目代码上传公司FTP 就不好用,主要是还不报错,不知道怎么找啊。你知道还能怎么贴代码,能把问题抛出来吗?

支持(0) 反对(0) Baby爱薇儿 | 园豆:66 (初学一级) | 2015-09-17 17:34

@Baby爱薇儿: 我知道还有一种办法就是写日志的方式,写.txt的调试方式。执行完某步骤的时候写日志即可。不妨试试?

支持(0) 反对(0) 大楚打码人 | 园豆:4313 (老鸟四级) | 2015-09-17 17:42

@贫民窟大侠: 这是全部代码

private void button1_Click(object sender, EventArgs e)
{
try
{

string filepath = @"E:\C#Test\Test2\";

string FTPfilepath = "ftp://192.168.1.1/TestXML/";
string ftpUserName = "xx";
string ftpPassWord = "xx";

StringBuilder xmlResult = new StringBuilder();

#region 拼接上传XML
xmlResult.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?> \r\n");

xmlResult.Append("</ShipOrder>");

 

//设置文件名称
string filename = DateTime.Now.ToString("yyyyMMddHHmmss");

 

using (StreamWriter sw = new StreamWriter(filepath + filename + ".xml", false, Encoding.GetEncoding("utf-8")))
{

sw.Write(xmlResult);
sw.Close();

}

 

#region 获取本地文件夹下所有文件名称
DirectoryInfo di = new DirectoryInfo(filepath);

//获取子文件夹列表
di.GetDirectories();
//获取文件列表
di.GetFiles();

 

for (int i = 0; i < di.GetFiles().Length; i++)
{
UpFileToFTP(ftpUserName, ftpPassWord, filepath + di.GetFiles()[i].ToString(), FTPfilepath + di.GetFiles()[i].ToString());

}

 


}
catch (Exception ex)
{
throw ex;
}
}

 

/// <summary>
/// 上传文件到FTP实现
/// </summary>
/// <param name="ftpUser">FTP用户名</param>
/// <param name="ftpPassWord">FTP密码</param>
/// <param name="filePath">文件本地路径</param>
/// <param name="FTPfilePath">文件FTP路径</param>
public void UpFileToFTP(string ftpUser, string ftpPassWord, string filePath, string FTPfilePath)
{
WebClient request = new WebClient();

request.Credentials = new NetworkCredential(ftpUser, ftpPassWord);

FileStream myStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
byte[] dataByte = new byte[myStream.Length];
myStream.Read(dataByte, 0, dataByte.Length); //写到2进制数组中
myStream.Close();
Uri uri = new Uri(FTPfilePath);
request.UploadDataAsync(uri, "STOR", dataByte, dataByte);
}

支持(0) 反对(0) Baby爱薇儿 | 园豆:66 (初学一级) | 2015-09-18 09:56

@Baby爱薇儿: 你这样,先在本地建一个txt,或者随便什么。试试你的这段代码能不能将这个文件传到FTP。

服务器上的防火墙关闭了吗?Ftp的账户也有权限的。如果你能远程进入服务器,不妨看看你们的FTP下的子账号权限。

支持(0) 反对(0) 大楚打码人 | 园豆:4313 (老鸟四级) | 2015-09-18 10:12

@贫民窟大侠:

我用我自己写的程序、用公司用户 传到公司服务器  成功!

我用公司项目的程序、用公司用户 传到公司服务器 失败!

 

这样是不是就排除了服务器防火墙,账户权限问题?

支持(0) 反对(0) Baby爱薇儿 | 园豆:66 (初学一级) | 2015-09-18 10:27

@Baby爱薇儿: 那就有可能是项目环境不一样,生成的文件版本也不一样,比对一下。但是没道理啊,也不报异常!醉了!

支持(0) 反对(0) 大楚打码人 | 园豆:4313 (老鸟四级) | 2015-09-18 11:02

@Baby爱薇儿: QQ说。5372604,有点忙。

支持(0) 反对(0) 大楚打码人 | 园豆:4313 (老鸟四级) | 2015-09-18 11:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册