¿Hay alguna otra supervisión de procesos para archivos creados con XMLDocument.Save() podría encontrar un archivo parcial? ¿Hay alguna diferencia si Save() sobrescribe un archivo existente?¿XMLDocument.Guardar una operación atómica?
Respuesta
Si ahorra así, no debería tener ningún problema.
using (var file = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
{
xmlDoc.Save(file);
}
No creo que haya ninguna garantía de atomicidad. No deberías depender de eso.
¿Qué hay de guardar un archivo temporal en su lugar y luego cambiarle el nombre? ¿El cambio de nombre se puede hacer atómicamente, o el sistema de archivos simplemente no funciona de esta manera? –
Creo que un cambio de nombre haría el trabajo. Depende de la cantidad de "garantía" que desee. Si desea una garantía "real", entonces debe buscar en la documentación una declaración de que la operación es atómica. Es posible que necesite ver el código .NET utilizando Reflector para ver qué llamadas de Win32 hace, luego investigue si esas llamadas son atómicas. De lo contrario, probablemente sea lo suficientemente bueno para darse cuenta de que un cambio de nombre de un directorio a otro en el mismo volumen realmente solo crea una nueva entrada de directorio y elimina la anterior. No es complicado, y probablemente atómico. –
Escribir archivos no es, en general, atómico. Consulte Process Monitor para tener una idea de lo que expone el sistema operativo.
XmlDocument.Save (cadena) utiliza FileShare.Read. La solución de ChaosPandion especifica FileShare.None. Consulte la diferencia de System.IO.FileShare en MSDN.
Esta respuesta https://stackoverflow.com/a/487198/1429390 proporciona a AFAIK un tipo de atomicidad de una manera fácil de usar. El principio es escribir en un archivo temporal y brindarle a la persona que llama la oportunidad de cambiar el nombre del archivo (y cualquier otra cosa que desee) en el momento oportuno. De esa forma, lo que pueda suceder mientras se crea y completa el archivo no puede dañar un archivo posiblemente existente.
Actualización: excepto que no porque System.IO.File.Move() se rehúsa a sobreescribir. Ver https://stackoverflow.com/a/10305475/1429390 para una solución alternativa.
- 1. Escribir una operación atómica
- 2. Es una operación atómica suficiente
- 3. costo de operación atómica
- 4. ¿Está accediendo a una variable en C# una operación atómica?
- 5. Una operación de copia de archivo atómica segura
- 6. ¿La actualización tiene una operación atómica de selección anidada?
- 7. SVN Error (No se pudo realizar la operación atómica)
- 8. Making inserción de un solo carácter en Vim una operación atómica
- 9. ¿Puede la compilación de varios paquetes Oracle Pl/SQL ser una operación atómica?
- 10. ¿La asignación de flotación simple es una operación atómica en el iPhone?
- 11. File.Delete() atómica bajo .NET
- 12. ¿La asignación de variables y la lectura de la operación atómica?
- 13. ¿Puedo hacer una MERGE atómica en Oracle?
- 14. ¿MERGE es una declaración atómica en SQL2008?
- 15. ¿Cómo se alterna un campo booleano en un documento con operación atómica?
- 16. escritura atómica para presentar con Python
- 17. RESTful actualización atómica de múltiples recursos?
- 18. ¿Está presionando una variable en una matriz una operación de enhebrado?
- 19. Está Actualizando la operación doble atomic
- 20. SVN confirmación atómica cómo-a
- 21. ¿MySQL Query contiene subconsulta atómica?
- 22. ¿Representación estructurada, factorizada y atómica?
- 23. Asignación de referencia atómica multihilo de Java
- 24. ¿Es segura la implementación de C++ para una flotación atómica?
- 25. ¿Hay alguna manera de hacer una función atómica en C? .
- 26. ¿Cambiar un puntero se considera una acción atómica en C?
- 27. ¿Cómo tener una prueba atómica real en QUnit?
- 28. Paralelización una operación vectorial Numpy
- 29. ¿Está lanzando una operación costosa?
- 30. C++ 0x implementación de plantilla atómica
Dale una paliza de aproximadamente 3 segundos. Tener un voto positivo :) –