自己用winform写了一个小功能上传文件到ftp服务器,功能都很好用,但是把代码合并到实际工程后,代码没报异常,但是FTP服务器上就是没有生成好的文件,实在是不知道问题方向,请了解的大神给点方向。谢谢。
你要是把异常都吃掉了,当然不会报告异常了。
但是我每个方法,都有try catch啊。 把异常都吃掉了 是什么意思啊? 那怎么能吐出来?
相同的代码 自己写的小程序 就好是,但是放到实际工程中就不好用。
@Baby爱薇儿: 你每个方法都有Try catch,出错会显示吗?吃掉的意思就是给你
Try... Catch掉了。
@爱编程的大叔: 那应该怎么弄,才能把问题抛出来呢?要是错误,catch 不是可以抛出来吗。本人小白,码字没多久,有些问题不太懂。请大叔指教。谢谢。
@Baby爱薇儿: 你这么说没法知道你咋写的,贴一段代码看看
@爱编程的大叔: 全部代码了。
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);
}
本地可以吗?本地的开发环境和服务器上的环境是否一致呢?必要的时候可以贴点代码!先检查下有可能出事儿的模块!
代码都在本地,只是一个是自己写的,一个是项目,自己写的没问题,就是项目出问题。所以没有头绪,不知道该怎么查找。
@Baby爱薇儿: 整合得有问题吧!wait wait wait……你是把自己写的功能整合到了项目里还是,你的是什么项目?cs的?
@贫民窟大侠: 在同一个项目里、同一套代码,只是连接地址、用户名、密码不同,我上传文件到我用我自己电脑搭建的FTP就可以上传成功,但是我连接公司的FTP服务器就不成功。
但是同样的连接地址,我在我自己写的小程序中不管是连接我自己的,还是公司的,都可以上传成功。
@Baby爱薇儿: 会不会是文件夹权限或者用户权限所致呢!不同的用户不同的权限。
@贫民窟大侠: 同一个用户,自己弄的就没问题,项目就有问题。所及我还是觉得项目,或者FTP 设置的问题。
@Baby爱薇儿: 嗯。应该是FTP设置的问题。
@贫民窟大侠: 自己代码 上传公司FTP 就可以,但是项目代码上传公司FTP 就不好用,主要是还不报错,不知道怎么找啊。你知道还能怎么贴代码,能把问题抛出来吗?
@Baby爱薇儿: 我知道还有一种办法就是写日志的方式,写.txt的调试方式。执行完某步骤的时候写日志即可。不妨试试?
@贫民窟大侠: 这是全部代码
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);
}
@Baby爱薇儿: 你这样,先在本地建一个txt,或者随便什么。试试你的这段代码能不能将这个文件传到FTP。
服务器上的防火墙关闭了吗?Ftp的账户也有权限的。如果你能远程进入服务器,不妨看看你们的FTP下的子账号权限。
@贫民窟大侠:
我用我自己写的程序、用公司用户 传到公司服务器 成功!
我用公司项目的程序、用公司用户 传到公司服务器 失败!
这样是不是就排除了服务器防火墙,账户权限问题?
@Baby爱薇儿: 那就有可能是项目环境不一样,生成的文件版本也不一样,比对一下。但是没道理啊,也不报异常!醉了!
@Baby爱薇儿: QQ说。5372604,有点忙。