簡體   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