Aan*_*Aan 17 .net c# exception return-value file-copying
静态方法File.Copy(String, String)不返回值.如果该功能成功与否,我如何以编程方式知道?如果没有抛出异常,那么File.Copy顺利.但我问的是如何将"不例外"作为条件.
像这样的东西:
if(no exception happened){
//my code goes here
}
Run Code Online (Sandbox Code Playgroud)
编辑:我使用一个简单的计数器解决了这个问题如下:
int i=0;
try{
File.Copy();
}
catch(e1){
i++;
}
catch(e2){
i++;
}
if(i==0){
//my code goes here
}
Run Code Online (Sandbox Code Playgroud)
感谢所有贡献者.我将通过你的答案选择最好的.
Nas*_*ine 23
如果操作没有抛出任何异常,则表示它成功.此处提供了可能的例外列表:
- 呼叫者没有所需的权限.
sourceFileName或者destFileName是零长度字符串,仅包含空格,或包含一个或多个无效字符InvalidPathChars.-要么-
sourceFileName或destFileName指定目录.
- sourceFileName或destFileName为null.
- 指定的路径,文件名或两者都超过系统定义的最大长度.例如,在基于Windows的平台上,路径必须少于248个字符,文件名必须少于260个字符.
- sourceFileName或destFileName中指定的路径无效(例如,它位于未映射的驱动器上).
sourceFileName没找到.
destFileName存在.-要么-
发生了I/O错误.
sourceFileName或者destFileName格式无效.
Mer*_*ham 12
错误
如果方法没有抛出异常,则不会发生错误.该方法能够执行它承诺会执行的工作,因此它将不再使用,并且不会尝试返回某种状态代码.您不需要检查状态代码,因为您将知道它已成功.
如果该方法未通过复制操作,则将引发异常.在这种情况下,该方法无法执行它承诺会执行的工作,这意味着发生了奇怪的(异常),因此抛出异常.由于抛出异常,您将被迫处理它,或者您的程序爆炸.因此,检查状态代码毫无意义.您无法编写任何能够以任何方式读取该状态代码的代码,因为永远不会达到状态检查代码.代码流将转到catch块或程序终止.
这些概念是使用异常进行错误处理的基础.
如何处理异常
除非你需要,并且有一些合理的方法从异常中恢复,否则不要处理它们.让你的程序爆炸.这样可以更容易地在代码中找到错误,因为未处理的异常将产生堆栈跟踪,这将告诉您程序的哪个部分确实爆炸,以及代码如何达到这一点.
如果您有合理的恢复方法(例如只是向用户显示错误消息并重试操作,或让他们输入不同的参数),那么您可以编写try/ catch块.编写可能在try块中引发异常的代码,并在块中写入恢复代码catch.
try
{
var file = File.Open(filename);
// Todo: Work with open file here
}
catch(FileNotFoundException e)
{
MessageBox.Show("Failed to open file - " + e.ToString());
// Todo: Additional recovery here,
// like telling the calling code to re-open the file selection dialog
}
Run Code Online (Sandbox Code Playgroud)
请注意,您永远不应该捕获基Exception类型,而应该捕获您可以处理的特定派生异常类型(例如FileNotFoundException).这是有道理的,因为您可能无法编写将成功从中恢复的代码OutOfMemoryException,并且该异常可能会在代码中的任何位置抛出.如果你抓住了Exception,那么你正在编写试图处理任何事情的代码,而不仅仅是你感兴趣的例外.
完成
File.Copy是一个同步操作.因此,一旦方法完成,则实际副本已完成.
这意味着您可以在复制行之后立即编写一行代码.并且该代码可以期望文件存在,因为它可以被完全复制,并且可以访问它.
如果该方法没有抛出异常,则表示它已成功.
| 归档时间: |
|
| 查看次数: |
32842 次 |
| 最近记录: |