Hi Team,
Is there a way to check if a file is in use to avoid error of file is being used by another process.
using System.Configuration;
using System.IO;
namespace FileConsole
{
class Program
{
static void Main(string[] args)
{
Operation();
}
protected virtual bool IsFileLocked(FileInfo file)
{
try
{
using (FileStream stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
{
stream.Close();
}
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
//file is not locked
return false;
}
public static void Operation()
{
string FileSource = ConfigurationManager.AppSettings["FileSource"];
string FileDestination = ConfigurationManager.AppSettings["FileDestination"];
if ((Directory.Exists(FileSource)) && (Directory.Exists(FileDestination)))
{
//copy files from Source Fake Files
string[] files_Source = Directory.GetFiles(FileSource);
//copy files from destination - Org files
string[] files_Destination = Directory.GetFiles(FileDestination);
string FileName_source = "", FileName_dest = "", File_Deletion = "";
foreach (string source in files_Source) // Fake files_Destination
{
FileName_source = System.IO.Path.GetFileName(source);
foreach (string dest in files_Destination)
{
FileName_dest = System.IO.Path.GetFileName(dest);
if (FileName_source.ToUpper() == FileName_dest.ToUpper())
{
File_Deletion = System.IO.Path.Combine(FileDestination, FileName_dest);
if (File.Exists(File_Deletion))
{
File.Delete(File_Deletion);
}
FileDestination = System.IO.Path.Combine(FileDestination, FileName_source);
FileName_source = System.IO.Path.Combine(FileSource, FileName_source);
System.IO.File.Copy(FileName_source, FileDestination, true);
if (File.Exists(FileDestination))
{
File.SetLastWriteTime(FileDestination, DateTime.Now);
}
FileDestination = "";
FileDestination = ConfigurationManager.AppSettings["FileDestination"];
}
}
}
}
else
{
}
}
}
}