C# 文件.Copy()时出现Windows服务异常

C# 文件.Copy()时出现Windows服务异常,c#,file,exception,windows-services,io,C#,File,Exception,Windows Services,Io,我的服务代码位于OnStart()中,引发异常(I),服务停止。我不知道为什么会有前男友?。。这是我的代码: publicservice1() { 初始化组件(); } 螺纹; 启动时受保护的覆盖无效(字符串[]args) { 线程=新线程(委托() { 字符串路径=@“D:\levani\FolderListenerTest\ListendFolder”; 文件系统监视程序侦听器; listener=新的FileSystemWatcher(路径); listener.Created+=新文件系

我的服务代码位于
OnStart()
中,引发异常(I),服务停止。我不知道为什么会有前男友?。。这是我的代码:

publicservice1()
{
初始化组件();
}
螺纹;
启动时受保护的覆盖无效(字符串[]args)
{
线程=新线程(委托()
{
字符串路径=@“D:\levani\FolderListenerTest\ListendFolder”;
文件系统监视程序侦听器;
listener=新的FileSystemWatcher(路径);
listener.Created+=新文件系统EventHandler(listener\u已创建);
listener.EnableRaisingEvents=true;
});
thread.Start();
}
已创建公共无效侦听器(对象发送器、文件系统目标)
{
Copy(e.FullPath,@“D:\levani\FolderListenerTest\CopiedFilesFolder\F”+e.Name);
}
受保护的覆盖void OnStop()
{
thread.Abort();
}
日志

日志名称:应用程序
源:.NET运行时
日期:2012年11月6日下午5:33:27
事件ID:1026
任务类别:无
级别:错误
关键词:经典
用户:不适用
电脑:黎凡电脑
说明:
应用程序:FolderListenerService.exe
框架版本:v4.0.30319
描述:由于未处理的异常,进程已终止。
异常信息:System.IO.IOException
堆栈:
在System.IO.\uuu Error.WinIOError(Int32,System.String)
位于System.IO.File.InternalCopy(System.String、System.String、Boolean)
在System.IO.File.Copy处(System.String,System.String)
在FolderListenerService.Service1.listener_处创建(System.Object、System.IO.FileSystemEventArgs)
在System.IO.FileSystemWatcher.OnCreated处(System.IO.filesystemventargs)
位于System.IO.FileSystemWatcher.NotifyFileSystemEventArgs(Int32,System.String)
在System.IO.FileSystemWatcher.CompletionStatusChanged(UInt32、UInt32、System.Threading.NativeOverlapped*)
在System.Threading.\u IOCompletionCallback.PerformiCompletionCallback(UInt32,UInt32,System.Threading.NativeOverlapped*)
事件Xml:
1026
2.
0
0x8000000000000
18314
应用
莱文电脑
应用程序:FolderListenerService.exe
框架版本:v4.0.30319
描述:由于未处理的异常,进程已终止。
异常信息:System.IO.IOException
堆栈:
在System.IO.\uuu Error.WinIOError(Int32,System.String)
位于System.IO.File.InternalCopy(System.String、System.String、Boolean)
在System.IO.File.Copy处(System.String,System.String)
在FolderListenerService.Service1.listener_处创建(System.Object、System.IO.FileSystemEventArgs)
在System.IO.FileSystemWatcher.OnCreated处(System.IO.filesystemventargs)
位于System.IO.FileSystemWatcher.NotifyFileSystemEventArgs(Int32,System.String)
在System.IO.FileSystemWatcher.CompletionStatusChanged(UInt32、UInt32、System.Threading.NativeOverlapped*)
在System.Threading.\u IOCompletionCallback.PerformiCompletionCallback(UInt32,UInt32,System.Threading.NativeOverlapped*)

文件中的额外参数true。如果文件已经存在,则复制将覆盖该文件。我认为错误是文件已经存在

File.Copy(e.FullPath, @"D:\levani\FolderListenerTest\CopiedFilesFolder\F" + e.Name,true);
将代码放入
try..catch块
并捕获
IOException
异常。您可以登录文件以进行进一步调试


当文件名、目录名或卷标语法不正确时,会出现
WinIOError
错误(在调用堆栈中)。因此,只需检查正确的路径和文件名。

文件中的额外参数true。如果文件已经存在,则复制将覆盖该文件。我认为错误是文件已经存在

File.Copy(e.FullPath, @"D:\levani\FolderListenerTest\CopiedFilesFolder\F" + e.Name,true);
将代码放入
try..catch块
并捕获
IOException
异常。您可以登录文件以进行进一步调试


当文件名、目录名或卷标语法不正确时,会出现
WinIOError
错误(在调用堆栈中)。因此,只需检查正确的路径和文件名。

原因可能有很多。请参阅文档,特别是记录可能引发的所有异常的异常部分

您需要包装File.Copy()并捕获任何异常,以便做出适当的反应:

public void listener_Created(object sender, FileSystemEventArgs e)
{
    try
    {
        File.Copy(e.FullPath, @"D:\levani\FolderListenerTest\CopiedFilesFolder\F" + e.Name);
    }
    catch {FileNotFoundException e)
    { 
        //do something if file isn't there
    }
    catch {UnauthorizedAccessException e)
    { 
        //do something if invalid permissions
    }

    //etc 
}

可能有很多原因。请参阅文档,特别是记录可能引发的所有异常的异常部分

您需要包装File.Copy()并捕获任何异常,以便做出适当的反应:

public void listener_Created(object sender, FileSystemEventArgs e)
{
    try
    {
        File.Copy(e.FullPath, @"D:\levani\FolderListenerTest\CopiedFilesFolder\F" + e.Name);
    }
    catch {FileNotFoundException e)
    { 
        //do something if file isn't there
    }
    catch {UnauthorizedAccessException e)
    { 
        //do something if invalid permissions
    }

    //etc 
}

如果创建新线程,则需要确保处理该线程上引发的所有异常由thread.Start()创建的线程上发生的任何未经处理的异常都将导致应用程序终止。

具体地说,构造函数会引发一些您在当前代码中没有处理的异常。这两个函数都在单独的线程上调用。由于文件已经存在,您很可能会遇到IOException(对同一文件的多次更改将导致代码多次尝试复制该文件,从而导致在第一次更改后的任何副本上发生冲突)


您可能应该更新您的File.Copy调用,以使用您创建的
侦听器
函数,并将其包装在一个try/catch块中,该块不会对异常进行搜索(而不是重新搜索)。

如果您创建了一个新线程,您需要确保处理该线程上引发的所有异常由thread.Start()创建的线程上发生的任何未经处理的异常都将导致应用程序终止。

具体地说,构造函数会引发一些您在当前代码中没有处理的异常。这两个函数都在单独的线程上调用。由于文件已经存在,您很可能会遇到IOException(对同一文件的多次更改将导致代码多次尝试复制该文件,从而导致在第一次更改后的任何副本上发生冲突)。