c# - from - Leer el archivo de registro utilizado por otro proceso
copy from remote desktop to local (2)
Gol
Quiero presionar un botón en mi GUI y leer el archivo seclog.log (registro AV de Symantec) desde una máquina remota y mostrar el contenido del registro en un cuadro de texto enriquecido en mi aplicación.
Cosas que funcionan
todo menos leer el archivo de registro
Mensaje de error
System.IO.IOException was unhandled
Message=The process cannot access the file ''//HOSTNAME/C$/Program Files (x86)/Symantec/Symantec Endpoint Protection/seclog.log'' because it is being used by another process.
Source=mscorlib
código
//possible seclog paths
String seclogPath1 = @"////" + target + "//C$//Program Files (x86)//Symantec//Symantec Endpoint Protection//seclog.log";
String seclogPath2 = @"////" + target + "//C$//Program Files//Symantec//Symantec Endpoint Protection//seclog.log";
//if seclog exists
if (File.Exists(seclogPath1))
{
//output.AppendText("file exists at " + seclogPath1);
//var seclogContent = File.Open(seclogPath1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
Stream stream = File.OpenRead(seclogPath1);
StreamReader streamReader = new StreamReader(stream);
string str = streamReader.ReadToEnd();
output.AppendText(str);
streamReader.Close();
stream.Close();
}
Cosas que he probado
El archivo está siendo usado por otro proceso
C # El proceso no puede acceder al archivo '''' ''porque está siendo usado por otro proceso
Google el problema
utilizando filestreams de múltiples maneras
//possible seclog paths
String seclogPath1 = @"////" + target + "//C$//Program Files (x86)//Symantec//Symantec Endpoint Protection//seclog.log";
String seclogPath2 = @"////" + target + "//C$//Program Files//Symantec//Symantec Endpoint Protection//seclog.log";
//if seclog exists
if (File.Exists(seclogPath1))
{
//output.AppendText("file exists at " + seclogPath1);
//var seclogContent = File.Open(seclogPath1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
Stream stream = File.Open(seclogPath1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
//File.OpenRead(seclogPath1);
StreamReader streamReader = new StreamReader(stream);
string str = streamReader.ReadToEnd();
output.AppendText(str);
streamReader.Close();
stream.Close();
}
lo que tuve que cambiar
Tuve que crear una secuencia de archivos readwrite
codigo original
Stream stream = File.OpenRead(seclogPath1);
StreamReader streamReader = new StreamReader(stream);
nuevo código
Stream stream = File.Open(seclogPath1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
//File.OpenRead(seclogPath1);
StreamReader streamReader = new StreamReader(stream);
using (StreamReader sr = new StreamReader(filePath, true))
{
sr.Close(); //This is mandatory
//Do your file operation
}