错误:进程无法访问该文件,因为该文件正由另一个进程使用。 [英] Error: the process cannot access the file because it is being used by another process.

查看:131
本文介绍了错误:进程无法访问该文件,因为该文件正由另一个进程使用。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

I have created a file watcher processor which transforms xls file to csv file once the file gets dropped in the folder.

While doing so i get the error The process cannot access the file '\\somepath\someotherpath\user\FileName_2018.xls' because it is being used by another process.





我的尝试:





What I have tried:

private static string sourcePath = ConfigurationManager.AppSettings["Excel"];
       private static string destination = ConfigurationManager.AppSettings["CSV"];
       private static string xlsFileName = string.Empty;
       static void Main(string[] args)
       {
           FileSystemWatcher watcher = new FileSystemWatcher
           {
               Filter = "*.xls",
               Path = sourcePath,
               EnableRaisingEvents = true
           };
           watcher.Created += new FileSystemEventHandler(Watcher_Created);
           Console.WriteLine($"FileSystemWatcher ready and listening to changes in :\n\n{sourcePath}");
           Console.Read();
       }
       static void Watcher_Created(object sender, FileSystemEventArgs e)
       {
           xlsFileName = e.Name;

           var filePath = sourcePath + xlsFileName;
           var extension = Path.GetExtension(filePath);

           if (extension.ToLower() == ".xls")
           {
               Console.WriteLine($"\n{xlsFileName} file is saved and ready to be processed.");
               PerformETL(xlsFileName);
           }
       }

       private static void PerformETL(string xlsFile)
       {
           try
           {
               var isCSVFileCreated = false;
               var filePath = sourcePath + xlsFile;
               var extension = Path.GetExtension(filePath);
               var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(xlsFile);

               if (extension.ToLower() == ".xls")
               {
                   IExcelDataReader excelReader;
                   DataSet dataset;

                   using (FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
                   {
                       excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
                       dataset = excelReader.AsDataSet();
                   }

                   DataTable dtTemplate = dataset.Tables[0];

                   using (var output = File.CreateText($"{destination}{fileNameWithoutExtension}.csv"))
                   {
                       for (int i = 5; i < dtTemplate.Rows.Count; i++)
                       {
                           // 7 spaces
                           output.WriteLine($"{dtTemplate.Rows[i][3].ToString().Trim()},{dtTemplate.Rows[i][4].ToString().Trim().PadLeft(9, '0')}");
                       }
                   }

                   isCSVFileCreated = true;
               }
               else
               {
                   isCSVFileCreated = false;
               }

               if (isCSVFileCreated)
               {
                   Console.WriteLine("File is extracted and transformed to space delimited file format");
               }
               else
               {
                   Console.WriteLine("File is extracted and transformed to space delimited file format");
               }

               DeleteExcelFile(filePath);
           }
           catch (Exception ex)
           {
               Console.WriteLine($"error: {ex.Message}");
           }
       }

       private static void DeleteExcelFile(string filePath)
       {
           var fileName = Path.GetFileName(filePath);
           if (File.Exists(filePath))
           {
               File.Delete(filePath);
           }
           Console.WriteLine($"{fileName} is deleted.");
       }

推荐答案

FileSystemWatcher准备好并听取以下更改:\ n\ n {sourcePath });
Console.Read();
}
static void Watcher_Created(object sender,FileSystemEventArgs e)
{
xlsFileName = e.Name;

var filePath = sourcePath + xlsFileName;
var extension = Path.GetExtension(filePath);

if(extension.ToLower()==。xls)
{
Console.WriteLine(
"FileSystemWatcher ready and listening to changes in :\n\n{sourcePath}"); Console.Read(); } static void Watcher_Created(object sender, FileSystemEventArgs e) { xlsFileName = e.Name; var filePath = sourcePath + xlsFileName; var extension = Path.GetExtension(filePath); if (extension.ToLower() == ".xls") { Console.WriteLine(


\ n {xlsFileName}文件已保存并准备好进行处理。);
PerformETL(xlsFileName);
}
}

private static void PerformETL(字符串xlsFile)
{
尝试
{
var isCSVFileCreated = false;
var filePath = sourcePath + xlsFile;
var extension = Path.GetExtension(filePath);
var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(xlsFile);

if(extension.ToLower()==。xls)
{
IExcelDataReader excelReader;
DataSet数据集;

using(FileStream stream = File.Open(filePath,FileMode.Open,FileAccess.Read))
{
excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
dataset = excelReader.AsDataSet();
}

DataTable dtTemplate = dataset.Tables [0];

using(var output = File.CreateText(
"\n{xlsFileName} file is saved and ready to be processed."); PerformETL(xlsFileName); } } private static void PerformETL(string xlsFile) { try { var isCSVFileCreated = false; var filePath = sourcePath + xlsFile; var extension = Path.GetExtension(filePath); var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(xlsFile); if (extension.ToLower() == ".xls") { IExcelDataReader excelReader; DataSet dataset; using (FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read)) { excelReader = ExcelReaderFactory.CreateBinaryReader(stream); dataset = excelReader.AsDataSet(); } DataTable dtTemplate = dataset.Tables[0]; using (var output = File.CreateText(


{destination} {fileNameWithoutExtension} .csv))
{
for (int i = 5; i< dtTemplate.Rows.Count; i ++)
{
// 7个空格
output.WriteLine(
"{destination}{fileNameWithoutExtension}.csv")) { for (int i = 5; i < dtTemplate.Rows.Count; i++) { // 7 spaces output.WriteLine(


这篇关于错误:进程无法访问该文件,因为该文件正由另一个进程使用。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆