繁体   English   中英

C# File.ReadAllText 进程无法访问该文件,因为它正被另一个进程使用

[英]C# File.ReadAllText The process cannot access the file because it is being used by another process

编辑 xml 内容后,我的代码一直显示“该进程无法访问文件‘路径’,因为它正被另一个进程使用。” 得到错误。 等待您的解决方案。

var regex = new Regex(@"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]", RegexOptions.Compiled);

                var memStream = new MemoryStream();
                using (Stream sr = File.Open(file.FullName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
                {
                    sr.CopyTo(memStream);
                    sr.Close();
                    sr.Dispose();
                }

                using (Stream sr = File.Open(file.FullName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
                {
                    var text = Encoding.ASCII.GetString(memStream.ToArray());
                    var result = regex.Replace(text, String.Empty);
                    byte[] bArray = Encoding.UTF8.GetBytes(result);
                    sr.Write(bArray, 0, bArray.Length);
                    sr.Close();
                    sr.Dispose();
                    memStream.Close();
                    memStream.Dispose();
                }

string xml = File.ReadAllText(xmlFile.FullName); 

(在这里添加评论会很乱)

如果这有效,它不会在 XML 文件的末尾留下垃圾并使其无效吗? 为什么不简单地 ReadAllText、replace 和 WriteAllText。 IE:

var regex = new Regex(@"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]", RegexOptions.Compiled);

string xml = regex.Replace(File.ReadAllText(file.FullName), String.Empty);
File.WriteAllText(file.FullName, xml); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM