puedo abrir un FileStream conFile.ReadLines sin bloquearlo?
new FileStream(logfileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
sin bloquear el archivo.
¿Puedo hacer lo mismo con File.ReadLines(string path)
?
puedo abrir un FileStream conFile.ReadLines sin bloquearlo?
new FileStream(logfileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
sin bloquear el archivo.
¿Puedo hacer lo mismo con File.ReadLines(string path)
?
No ... Si nos fijamos con reflector verá que al final File.ReadLines
abre una FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 0x1000, FileOptions.SequentialScan);
Así compartida de solo lectura.
(que técnicamente se abre un StreamReader
con el FileStream
como se describió anteriormente)
voy a añadir que parece ser un juego de niños para hacer un método estático para hacerlo:
public static IEnumerable<string> ReadLines(string path)
{
using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 0x1000, FileOptions.SequentialScan))
using (var sr = new StreamReader(fs, Encoding.UTF8))
{
string line;
while ((line = sr.ReadLine()) != null)
{
yield return line;
}
}
}
Esto devuelve un IEnumerable<string>
(algo mejor si el archivo tiene muchos miles de líneas y solo necesita analizarlas de a una por vez). Si necesita una matriz, llámela como ReadLines("myfile").ToArray()
usando LINQ.
Tenga en cuenta que, lógicamente, si el archivo cambia "detrás de su parte posterior (del método)", ¿cómo funcionará todo indefinido? (ES probablemente técnicamente definido, pero la definición es bastante larga y compleja)
por lo que ReSharper es una herramienta de perfilado, se debe usar Reflector en tal caso – abatishchev
@abatishchev: No describiría a ReSharper como una herramienta de generación de perfiles. Creo que también puede descompilarse ahora (posiblemente solo en una versión beta). –
¿Por qué llama a su método 'ReadAllLines' si su comportamiento corresponde a' ReadLines' y no a 'ReadAllLines'? – CodesInChaos
File.ReadLines()
bloqueará el archivo hasta que finalice.
La respuesta debería representar una solución o al menos debería parecer que apunta en esa dirección. El buscador de respuestas ya sabe el hecho que afirmaste, por lo que no sirve de nada. –
[La documentación] (http://msdn.microsoft.com/en-us/library/dd383503.aspx) no dice nada sobre el comportamiento de bloqueo de ReadLines. Por lo tanto, incluso si resultara que la implementación del .NET Framework que usa no bloquea el archivo, no es algo en lo que pueda confiar al desarrollar su aplicación. – Heinzi