C# 如何将文件从Windows服务复制到网络位置?

C# 如何将文件从Windows服务复制到网络位置?,c#,windows-services,C#,Windows Services,我希望在Windows Server 2008服务器上运行Windows服务,该服务器将监视本地服务器上的目录(即C:\Watch),并且在该目录中创建新pdf时,将文件复制到网络共享(即://192.168.1.2/共享) 两个服务器都不是域的成员 Windows服务已将其登录设置为本地用户帐户,该帐户可以访问//服务器/共享并创建和删除文件 如果sourceDir和destDir是本地文件夹(如C:\Source和C:\Dest),则可以使用以下方法,但如果将destDir更改为网络位置(如

我希望在Windows Server 2008服务器上运行Windows服务,该服务器将监视本地服务器上的目录(即C:\Watch),并且在该目录中创建新pdf时,将文件复制到网络共享(即://192.168.1.2/共享)

两个服务器都不是域的成员

Windows服务已将其登录设置为本地用户帐户,该帐户可以访问//服务器/共享并创建和删除文件

如果sourceDir和destDir是本地文件夹(如C:\Source和C:\Dest),则可以使用以下方法,但如果将destDir更改为网络位置(如//server/share/或///server//share//),则会出现错误“t文件名、目录名或卷标语法不正确”

更新: 当我将sourceDir设置为C:\Watch,destDir设置为\server\share\(如果服务器可以是Windows或Ubuntu服务器,我会得到一个System.UnauthorizedAccess错误,我假设该错误来自目标服务器。如何设置连接到目标服务器时使用的凭据。请记住,服务器不在域中,可以是Windows或Ubuntu

public partial class Service1 : ServiceBase
{
    private FileSystemWatcher watcher;
    private string sourceFolder;
    private string destFolder;

    public Service1()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        this.sourceFolder = Properties.Settings.Default.sourceDir;
        this.destFolder = Properties.Settings.Default.destDir;

        watcher = new FileSystemWatcher();
        watcher.Path = this.sourceFolder;
        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
        watcher.Filter = "*.pdf";

        watcher.Created += new FileSystemEventHandler(watcher_Created);

        watcher.EnableRaisingEvents = true;
    }

    protected override void OnStop()
    {
    }

    private void watcher_Created(object source, FileSystemEventArgs e)
    {
        FileInfo fInfo = new FileInfo(e.FullPath);
        while (IsFileLocked(fInfo))
        {
            Thread.Sleep(500);
        }
        System.IO.File.Copy(e.FullPath, this.destFolder + e.Name);
        System.IO.File.Delete(e.FullPath);
    }
}

服务器共享将是:

string networkShare = @"\\ServerName\Share\";
还请记住,服务正在执行的标识将影响服务是否能够保存到该位置。如果您正在使用域服务帐户来运行该服务,请确保您从共享所在的计算机上调整目标共享文件夹上的ACL,以允许写入奥德的回答
我曾经以本地用户的身份运行该服务,该服务也是在远程Ubuntu服务器上设置的。一切都很好。

谢谢。我硬编码了@“\\server\share\”,但现在出现以下错误“系统无法访问该文件”。因此,我想这是一个权限问题,即使当我以用户身份登录时,服务设置为登录,因为我可以在\\server\share中创建文件。在旁注中,我如何使用@as in@“\\server\share\”当路径是字符串变量时。您可以将目标存储在app.config中,然后从app.config中读取,在app.config中,它只需要\\server\shareGreat就可以了。您可以将自己的答案标记为已接受,也可以将我的答案标记为已接受,这样其他人可能会受益。