Я написал службу Windows для перемещения файла из одного местоположения в другое и
затем прочитал файл в новом месте и записал данные в базу данных.
ВВ середине выполнения появляется сообщение об ошибке:
IOException: процесс не может получить доступ к файлу «путь к файлу», поскольку он используется другим процессом.
Myкод:
Класс перемещения файла
public void mysql()
{
string fileName = "Bargstedt.csv";
string sourcePath = @"\\192.168.1.2\Data\Company Files\";
string targetPath = @"C:\Users\source";
string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
string destFile = System.IO.Path.Combine(targetPath, fileName);
if (!System.IO.Directory.Exists(targetPath))
{
System.IO.Directory.CreateDirectory(targetPath);
}
System.IO.File.Copy(sourceFile, destFile, true);
if (System.IO.Directory.Exists(sourcePath))
{
string[] files = System.IO.Directory.GetFiles(sourcePath);
fileName = System.IO.Path.GetFileName(fileName);
destFile = System.IO.Path.Combine(targetPath, fileName);
FileInfo info = new FileInfo(destFile);
bool exists = info.Exists;
if (exists == true)
{
try
{
int delay = 400;
File.Delete(@"C:\Users\Isuruh\source\Bargstedt.csv");
Thread.Sleep(delay);
System.IO.File.Copy(sourceFile, destFile, true);
Debug.WriteLine("file moved");
}
catch (IOException ex) { }
}
}
else
{
Console.WriteLine("Source path does not exist!");
}
Console.WriteLine("Press any key to exit.");
}
Вставить класс
public void Insert()
{
if (this.OpenConnection() == true)
{
using(var reader = new StreamReader(@"C:\Users\source\Bargstedt.csv"))
//using (var stream = File.Open(path, FileMode.Open, FileAccess.Write, FileShare.ReadWrite))
{
List<string> listA = new List<string>();
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
string querynew = "INSERT INTO new_jobs"
+ "(board_code,status,code,no1,no2,thickness,dimension,material,root,variable,number,stable,constant)"
+ "VALUES (?jobNo, ?strClientName, ?strClientReference, ?strJobCategory, ?datCommisioned, ?datPromisedDelivery, ?division, ?date_assigned, ?root, ?variable, ?number, ?stable, ?constant)";
Я не упомянул весь кодза услугу, поскольку она слишком длинная.
Как указано в Solution 01 Я пытался использовать
using (var stream = File.Open(path, FileMode.Open, FileAccess.Write, FileShare.Read))
строку вместо
using(var reader = new StreamReader(@"C:\Users\source\Bargstedt.csv"))
Но это вызывает ошибки в приведенных ниже ключевых словах, которые я использовал.
Я не уверен, возможно ли использовать открытый файл вместо класса считывателя?
По сути, что мне нужно сделатьтакое запуск процесса вставки после завершения процесса перемещения файла.
Есть предложения о том, как это сделать?
PS: Возможно, это дублирующий вопрос вопроса, который я упомянул выше.Я изо всех сил старался сделать этот вопрос уникальным.Цените, если не помечены как дубликаты.Спасибо!