错误:进程无法访问该文件,因为该文件正由另一个进程使用。 [英] Error: the process cannot access the file because it is being used by another process.
本文介绍了错误:进程无法访问该文件,因为该文件正由另一个进程使用。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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屋!
查看全文