发送邮件的bug
来源:互联网 发布:sql优化书籍推荐知乎 编辑:程序博客网 时间:2024/05/21 19:47
邮件发送,之前发送的写死路径的文件都正常发送出去了,用
QStringfileName = QFileDialog::getSaveFileName(this,
tr("导出考勤表"),
".",
tr("Files (*.csv)"),
&selectedFilter);
获取的文件名,然后传给发送邮件的函数,然后程序崩溃。跟踪调试到 PartSource* pAttach = new FilePartSource(string(sAttachFile)),是提示Poco::FileNotFoundException。从异常的名字来看,是没有找到文件。但是那个文件是刚生成的,存在的啊,不存在 这个文件不存在这个问题。然后我就想会不会是文件的路径写的有问题,因为Qt的路径是无平台的,即都用“/”表示,poco 的路径就不一定支持的说。然后用Qt 的表示方法试验之后,发送邮件成功。所以不是路径的问题。然后我就查看这个FilePartSource函数,希望看到源代码,没有,直接进入汇编语言中了。然后我想着应该有注释吧。转到定义之后发现如下注释:
/// Creates theFilePartSource for the given path.
///
///The MIME type is set to application/octet-stream.
///
/// Throws an OpenFileExceptionif the file cannot be opened.
黄色的说明这个函数抛出的异常类型,以及异常原因。所以这是因为文件不能被打开。
于是上网搜索都有什么原因不能打开文件?
总结大概有3种原因:
1.个是文件不存在, 你以读写的方式打开, 就会失败.
2.另一个是文件正在被别的程序使用, 这个时候你也无法打开.
3.就是你没有操作该文件的权限.
然后想起来,我是用getSaveFileName保存文件的形式打开文件的,猜测这个文件用这种方式获得的文件路径,文件已经被程序使用了。并且没有明确的说明这个文件是否被使用,是否被释放了。
或者说
【
今天写一个文件分割与合并的程序,开始使用C语言的file操作fopen等函数写的,后来又用C++文件流写了一遍,发现了一些问题。
在读子文件的时候,只能成功的打开第一个子文件进行读操作,第二个文件就打不开了,我找了半天,最终发现原因是因为我没有调用clear函数。因为我为读文件只申请了一个对象ifstream fRead,然后读完每一个子文件,就进行fRead.close(),之后再用fRead.open打开下一个文件进行读,事实上这样会失败,尽管close之后fRead的值已经变为0,而且用GetLastError得到错误代码是0。正确的做法是在fRead.close之后或之前调用fRead.clear。
找出这个错误之后,我又重新用fopen等函数做了实验,即用同一个文件句柄进行读不同文件的操作,这样没有任何问题,调用close函数可以正常打开下个文件。
总结一下,就是用同一个文件流对象对不同文件进行读操作时,读完毕之后不能只调用close,还要调用clear,文件流的close函数和C语言的close还是有区别的。
源文档 <http://blog.csdn.net/zero_226/article/details/5740727>
】
于是用getOpenFileName打开这个文件之后,就发送成功。 原因应该是getOpenFIleName这个函数会在打开文件之前检测文件流标识位的归位问题吧。
- 发送邮件的bug
- EBS12.1.3往smtp邮件服务器发送邮件的bug
- EBS12.1.3往smtp邮件服务器发送邮件的bug
- iOS 捕获Crash 发送Bug邮件
- iOS 捕获Crash 发送Bug邮件
- iOS 捕获Crash 发送Bug邮件
- 简单邮件的邮件发送
- java 邮件发送 --- 简单的邮件发送
- 昨天的邮件发送bug修改成功之后,又出现新的大问题
- 发送邮件的例子
- 发送邮件的类
- 发送邮件的郁闷
- 邮件发送的基本点
- C#的发送邮件
- 发送邮件的实例
- 邮件发送的应用
- 初级邮件的发送
- 邮件发送的解决办法
- Oracle数据仓库查询优化技术
- 栈的一种实现(数组)
- RHEL6.4评估版无法使用yum解决方案
- 用Eclipse和GDB构建ARM交叉编译和在线调试环境
- java中的getClass()方法
- 发送邮件的bug
- Activity launchMode="SingleTaks"的秘密
- C语言的静态函数
- iOS开发牛人博客收集
- ABAP 中 MOVE ... TO 和 WRITE ... TO 的区别
- Sort List
- 路再长也有尽头,别往回走
- socket编程
- 反编译工具JAD.exe使用,在MyEclipse 10 添加jadclipser 插件