Я работал над этим небольшим фрагментом кода, который кажется тривиальным, но, тем не менее, я не могу понять, в чем проблема. Мои функции делают довольно простую вещь. Открывает файл, копирует его содержимое, заменяет строку внутри и копирует ее обратно в исходный файл (простой поиск и замена внутри текстового файла).
Я действительно не знал, как это сделать, так как я добавляю строки в исходный файл, поэтому я просто создаю копию файла (file.temp), копирую также резервную копию (file.temp), затем удаляю исходный файл (файл) и скопируйте файл .temp в файл.
Я получаю исключение при удалении файла.
Вот пример кода:
private static bool modifyFile(FileInfo file, string extractedMethod, string modifiedMethod)
{
Boolean result = false;
FileStream fs = new FileStream(file.FullName + ".tmp", FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
StreamReader streamreader = file.OpenText();
String originalPath = file.FullName;
string input = streamreader.ReadToEnd();
Console.WriteLine("input : {0}", input);
String tempString = input.Replace(extractedMethod, modifiedMethod);
Console.WriteLine("replaced String {0}", tempString);
try
{
sw.Write(tempString);
sw.Flush();
sw.Close();
sw.Dispose();
fs.Close();
fs.Dispose();
streamreader.Close();
streamreader.Dispose();
File.Copy(originalPath, originalPath + ".old", true);
FileInfo newFile = new FileInfo(originalPath + ".tmp");
File.Delete(originalPath);
File.Copy(fs., originalPath, true);
result = true;
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
return result;
}`
И соответствующее исключение
System.IO.IOException: The process cannot access the file 'E:\mypath\myFile.cs' because it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.File.Delete(String path)
at callingMethod.modifyFile(FileInfo file, String extractedMethod, String modifiedMethod)
Обычно эти ошибки происходят из открытых потоков файлов, но я позаботился об этом. Я думаю, что забыл важный шаг, но не могу понять, где.
Большое спасибо за вашу помощь,