C#Windows服务文件移动到其他目录

C#Windows服务文件移动到其他目录,c#,service,C#,Service,显然,改变密码让我头疼 这是我目前面临的问题 我开发了一个服务,可以从SQL中提取数据,将数据转换成CSV文件,然后通过WinSCP上传文件。上传完成后,文件将被移动到另一个目录 但是,我们进行了升级,我无法再从SQL中提取数据,因为用户必须手动下载文件并放入我的文件夹 然后,我更改了代码以删除SQL部分,并通过WinSCP保留了从上载文件开始的序列 但是,现在“我的文件移动”不再适用于以下错误: 无法更改文件名,因为:找不到文件“Q:\FrontOffice\Nights\Qualtrics\

显然,改变密码让我头疼

这是我目前面临的问题

我开发了一个服务,可以从SQL中提取数据,将数据转换成CSV文件,然后通过WinSCP上传文件。上传完成后,文件将被移动到另一个目录

但是,我们进行了升级,我无法再从SQL中提取数据,因为用户必须手动下载文件并放入我的文件夹

然后,我更改了代码以删除SQL部分,并通过WinSCP保留了从上载文件开始的序列

但是,现在“我的文件移动”不再适用于以下错误:

无法更改文件名,因为:找不到文件“Q:\FrontOffice\Nights\Qualtrics\UNPROCESSED\import contacts.csv”

当文件和路径存在时,它找不到该文件有什么原因吗?

注意1:Windows服务安装在服务器环境中。服务器可以使用管理员凭据访问网络驱动器

注2:用户只需将文件放入未处理的文件夹,而服务将处理该文件并将其移动到已处理的文件夹

这是我以前的文件移动代码:


string attachFileLoc = AppDomain.CurrentDomain.BaseDirectory + "\\Logs\\import-contacts-"+ DateTime.Today.AddDays(-1).ToString("yyyyMMdd") + ".csv";
            var filename = Path.GetFileName(attachFileLoc);

try
            {
                System.IO.File.Move(@"C:\Users\Administrator\Documents\Automation\csvfiles\import-contacts.csv", attachFileLoc);
                WriteToFile("New File name is : " + filename);

            }
            catch (System.Exception ex)
            {
                WriteToFile("File Name couldnt be changed because : " + ex.Message);
            }

然后,我修改了代码以反映到我们的NAS网络文件夹中


string attachFileLoc = @"Q:\FrontOffice\Nights\Qualtrics\PROCESSED\import-contacts-" + DateTime.Today.AddDays(-1).ToString("yyyyMMdd") + ".CSV";

try
            {
                System.IO.File.Move(@"Q:\FrontOffice\Nights\Qualtrics\UNPROCESSED\import-contacts.csv", attachFileLoc);
                WriteToFile("New File name is : " + filename);

            }
            catch (System.Exception ex)
            {
                WriteToFile("File Name couldnt be changed because : " + ex.Message);
            }

然后,我尝试使用其他方法获取文件位置和名称

string[] qfile = Directory.GetFiles(@"Q:\FrontOffice\Nights\Qualtrics\UNPROCESSED\", "*.CSV").FirstOrDefault();

try
            {
                System.IO.File.Move(qfile[0], attachFileLoc);
                WriteToFile("New File name is : " + filename);

            }
            catch (System.Exception ex)
            {
                WriteToFile("File Name couldnt be changed because : " + ex.Message);
            }
但这一个甚至没有获得文件名和位置

mjwills要求的编辑1:

Caius Jard要求编辑2:

[解决方案]

我运行了debug并尝试使用trycatch方法来查看发生了什么。 显然,我没有足够的特权级别,根据之前与其他人在此线程中的对话

我将服务器添加到域中,因为我的NAS也在域中。 我还添加了Windows服务以作为域用户登录

然后,我继续尝试从服务器中删除映射的驱动器。这是行不通的

当我已映射驱动器或在代码中进行映射时,这两种情况都可以工作,而安装的服务位于域中的服务器中

结论: Windows服务确实使用映射驱动器,但Windows服务身份验证与登录的用户或安装了服务的用户不同

解决方案:

将登录选项添加到与网络驱动器身份验证匹配的windows服务

i、 e:如果网络驱动器是域中的NAS,则登录选项应添加有权访问所需文件夹的域ID


i、 e2:如果网络驱动器是来自PC21的共享文件夹,则登录选项应为具有PC21中所需文件夹身份验证的ID。

注释不用于扩展讨论;这段对话已经结束。正如我之前写的,你没有编程问题。@MartinPrikryl ya,没错。谢谢你,马丁。对此我深表歉意。我忽略了编程规则,我们总是需要使用TryCatch方法来正确跟踪错误。