C# 重命名.csv文件并尝试立即打开会提供打开只读模式的选项

C# 重命名.csv文件并尝试立即打开会提供打开只读模式的选项,c#,asp.net-mvc,ssis,C#,Asp.net Mvc,Ssis,我在重命名test6.csv文件时发现系统上有一个奇怪的行为,并立即尝试打开它,然后我的Microsoft Excel给了我三个选项: 只读 通知 取消 基本上,我是在调查我的SSIS作业中发生的一个问题,该问题因错误而失败 “进程无法访问该文件 “\\share\ABCD\UploadFiles\20180614\u 025323\u test6.csv” 因为它正被另一个进程使用。” 系统流程为- 用户上载文件-成功 ASP.NET MVC Controller将此文件保存在共享位置并重命名

我在重命名test6.csv文件时发现系统上有一个奇怪的行为,并立即尝试打开它,然后我的Microsoft Excel给了我三个选项:

  • 只读

  • 通知

  • 取消

  • 基本上,我是在调查我的SSIS作业中发生的一个问题,该问题因错误而失败

    “进程无法访问该文件 “\\share\ABCD\UploadFiles\20180614\u 025323\u test6.csv” 因为它正被另一个进程使用。”

    系统流程为-

  • 用户上载文件-成功

  • ASP.NET MVC Controller将此文件保存在共享位置并重命名它-成功

  • SSIS作业标识此文件,并根据说明读取其内容和进程-失败

  • 起初我认为这可能是因为MVC控制器没有关闭其处理程序,因此可能会导致问题,但后来我发现MVC控制器正在使用HttpPostedFile,我们不需要在请求结束时显式关闭它,因为它将被关闭。(参考-)

    下面是MVC控制器操作调用的文件保存代码

    private bool TryProcessFileUpload(HttpFileCollection files, out FileUploadInfo fileInfo, out string generatedFileName)
            {
                fileInfo = null;
                generatedFileName = string.Empty;
                if (files == null || files.Count == 0)
                    return false;
    
                // This illustrates how to get the file names.
                HttpPostedFile file = files[0];
                if (file != null)
                {
                      fileInfo = new FileUploadInfo(GetFileName(file.FileName), User.Identity.Name);
                      string gfn = fileInfo.GenerateFileName();
                      generatedFileName = gfn;
                      var fileSaveToPath = GetFileStoragePath(gfn);
                      file.SaveAs(fileSaveToPath);
    
                      return true;
                }            
    
                return false;
            }
    

    我需要帮助来解决我的主要问题,即SSIS,如果有人知道的话,我渴望了解.csv重命名行为。

    问题在于编辑文件后您似乎没有关闭流。脚本结束后,另一个操作仍在使用该文件。将流代码放在using块中。这将自动关闭流,并使您能够以读/写权限打开文件

    using( /* stream goes here */ )
    {
    
    }
    

    好奇您正在测试的CSV文件有多大。在您的
    if(file!=null)
    代码块中,为什么需要读取该文件?另外,您是否尝试过在读取时关闭流,如
    stream.close()
    ?@STLDeveloper文件大小小于1MB@Aamol如果我没记错的话,在重命名文件后,您没有关闭流。首先,您必须关闭流,然后才能访问您的文件。@AD8我已删除了不必要的代码,并更新了相关内容。但是仍然得到相同的错误。@Aamol“查找我的更新代码”是什么意思?