2010-08-19 36 views
12

Tôi đã tìm thấy một câu hỏi tương tự here nhưng đã bị đóng/chấp nhận với câu trả lời là "không làm điều đó".Buộc đóng một tập tin mở bằng C#

Tôi đang trong tình huống mà tôi không quan tâm điều gì xảy ra với các ứng dụng khác, tôi muốn lấy một tệp có thể bị khóa bởi những người khác (nếu cần) và theo cách của tôi. Tôi có thể cần di chuyển, đổi tên hoặc xóa tệp này.

Về cơ bản, tôi cần xử lý các tệp trong thư mục được tạo bởi ứng dụng không làm sạch khóa của nó. Tôi biết ứng dụng được xử lý xong khi tôi gọi điện, nhưng tôi cần phải giết khóa khi tôi chạy. Ngoài ra có vẻ như tôi đang mâu thuẫn với các lần đọc từ phần mềm AV cục bộ quét phần chia sẻ từ xa nơi máy chủ đang ở đó.

Tất cả điều này thêm vào tình huống "buộc đóng" không thể giải quyết được để tôi có thể làm những gì tôi cần. Có ai có ý tưởng về việc phải làm gì không?

Trả lời

2

này có lẽ là không liên quan và nếu nó là xin vui lòng ai đó bình luận nhưng có một công việc xung quanh tôi đã sử dụng trong thám hiểm trước để có được xung quanh ổ khóa tập tin.
Nếu tệp bị khóa bởi quá trình đã chết Windows thường sẽ không cho phép bạn xóa nó nhưng nếu bạn đã tạo một tệp mới cùng tên ở một nơi khác, hãy chuyển tệp đó vào thư mục thành công. Sau đó, bạn có thể xóa tệp mới và tất cả đều tốt.
Để sử dụng ứng dụng này cho ứng dụng của bạn, bạn phải có khả năng đọc tệp và lưu tệp đó vào bộ nhớ trước khi thực hiện việc này, sau đó bạn viết lại sau khi bạn đã thoát khỏi tệp cũ.
Có thể nó sẽ giúp ích, có thể không, nhưng đáng để thử.

0
foreach (var process in Process.GetProcessesByName("excel")) //whatever you need to close 
    { 
     if (process.MainWindowTitle.Contains("test.xlsx")) 
     { 
      process.Kill(); 
      break; 
     } 
    } 

hoặc

foreach (var process in Process.GetProcesses()) 
    { 
     if (process.MainWindowTitle.Contains("test.dat")) 
     { 
      process.Kill(); 
      break; 
     } 
    } 
Các vấn đề liên quan