Helpex - Trao đổi & giúp đỡ Đăng nhập
38

Tôi nhận được IOException rất lạ khi ghi vào tệp XML:

System.IO.IOException: The requested operation cannot be performed on a file with a user-mapped section open.

   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
   at System.Xml.XmlTextWriter..ctor(String filename, Encoding encoding)
   at System.Xml.XmlDocument.Save(String filename)

Đã xảy ra lỗi khi tôi gọi hàm Lưu (chuỗi) của XmlDocument.

Bất kỳ ý tưởng về những gì đã xảy ra?

38 hữu ích 0 bình luận 70k xem chia sẻ
43

Có vẻ như một quy trình khác đã mở tệp bằng cách sử dụng các API ánh xạ tệp (bộ nhớ dùng chung).

Chức năng tìm kiếm trong Process Explorer có thể cho bạn biết.

43 hữu ích 1 bình luận chia sẻ
12

Có vẻ như tệp bạn đang cố gắng viết đã được mở ở nơi khác, bằng mã của bạn hoặc bằng một quy trình khác.

Bạn có mở tệp trong trình chỉnh sửa không? Bạn có một số mã khác đọc nó, nhưng quên đóng nó?

Bạn có thể sử dụng Process Explorer để biết tiến trình nào có xử lý tệp đang mở trên đó - sử dụng lệnh Find/ Find handle or DLL....

12 hữu ích 1 bình luận chia sẻ
7

Thử loại trừ tệp khỏi dự án của bạn trong khi bạn gỡ lỗi. Tôi thấy rằng thực tế là VS2010 đang giữ tệp XML. Sau đó, bạn có thể chọn "Hiển thị tất cả các tệp" trong trình khám phá giải pháp của mình để kiểm tra gỡ lỗi bài đăng tệp XML.

Một khóa sẽ dừng sự cố khi thực hiện nhiều lần ghi.

lock(file){ write to file code here }
7 hữu ích 0 bình luận chia sẻ
5

Hệ điều hành hoặc Framework có thể khiến bạn không thành công, ví dụ: nếu bạn cố gắng mở đi mở lại cùng một tệp trong một vòng lặp chặt chẽ

 while (true) {
   File.WriteAllLines(...)
 }

Tất nhiên, bạn không muốn thực sự làm điều đó. Nhưng một lỗi trong mã của bạn có thể khiến điều đó xảy ra. Sự cố không phải do mã của bạn mà do sự cố với Windows hoặc .NET Framework.

Nếu bạn phải viết nhiều tệp rất nhanh, bạn có thể thêm một khoảng thời gian trễ nhỏ với Thread.Sleep (), điều này dường như cũng giúp hệ điều hành hoạt động trở lại.

 while (i++<100000000) {
   File.WriteAllLines(...)
   Thread.Sleep(1);
 }
5 hữu ích 2 bình luận chia sẻ
0

Trong trường hợp của tôi, các bản ghi trong tài liệu xml đang được lặp lại và trong mỗi lần lặp lại, các bản ghi đang được chỉnh sửa và lưu. Tôi đã thay đổi logic này để lưu tệp một lần sau khi tất cả các bản ghi được chỉnh sửa và poofff .. lỗi đã biến mất.

0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ c# xml ioexception , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading