Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 19 kết quả

Đề tài: Vấn đề tắt các chương trình đọc một file text nào đó

  1. #1
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    Mặc định Vấn đề tắt các chương trình đọc một file text nào đó

    Mình muốn hỏi , giờ có một file txt hay gì đó , nó đang được các chương trình khác đọc, giờ mình muốn kill bằng hết bất cứ cái nào đọc nó thì làm thế nào đây ???
    Ví dụ cùng 1 file a.txt mở bằng notepad , notepad2 , notepad++ , word, swriter .... Giờ làm sao tắt hết các chương trình đó
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  2. #2
    Ngày gia nhập
    11 2007
    Bài viết
    79

    Chào tienlbhoc,
    Câu hỏi của bạn có thể chia ra 3 trường hợp như sau:

    1. Vấn đề:

    - Trường hợp 1: File txt được dùng bởi một process khác và bị cấm truy cập bởi main process (Ví dụ: Edit Plus)

    - Trường hợp 2: File txt được dùng bởi một process khác và bị cấm truy cập bởi tiểu trình (sub module) chứ không phải do main module (Ví dụ: Excel)

    - Trường hợp 3: File txt được dùng bởi một process khác nhưng không bị cấm truy cập (Ví dụ: notepad)

    2. Giải quyết:

    - Trường hợp 1: Capture tên chương trình không cho ghi và kill nó đi

    - Trường hợp 2: Capture sau đó đổi tên thành Main Process (fixed code) rồi kill nó đi

    - Trường hợp 3: Capture tiêu đề của Main Window rồi kill nó đi

    Đoạn code dưới đây giả định rằng bạn đã có một nút button1 trên form và một tên file .txt (hoặc file bất kỳ tuân theo định dạng tên của Windows) với đầy đủ đường dẫn được nhập vào thông qua OpenFileDialog.


    Code:
    using System.Diagnostics;
    Code:
     string strFile = ""; //Ten file co duong dan
     string strFileSub = ""; //Ten file without duong dan va extension
     string strErrProcess =""; //Chua ten process gay ra loi
     char c = 'A'; //Ky tu dung de test write() sau do capture Exception
    Code:
     private void button1_Click(object sender, EventArgs e)
            {
                //Khoi dong vong lap kiem tra tat ca cac process dang chay tren may local
                foreach (Process objProcess in Process.GetProcesses())
                {
                    try
                    {
                        //Mo file voi kieu FileMode la OpenOrCreate
                        Stream strm = File.Open(strFile, FileMode.OpenOrCreate);
                        strm.WriteByte((byte)c);
                    }
                    catch (IOException ee)
                    {
                        //Truong hop 1: Bao loi binh thuong, tom lay ten process gay loi
                        strErrProcess = ee.Source.ToString();
                        //Truong hop 2: Bao loi nhung do sub process, phai doi ten thanh main process
                        if ("mscorlib" == strErrProcess) { strErrProcess = "EXCEL"; }
                       //Insert nhung chuong trinh khac tuong tu Excel here........
                    }
    
    			//Xu ly truong hop 1 va 2
                    if (objProcess.ProcessName.StartsWith(strErrProcess)) { objProcess.Kill(); }
    
                    //Xu ly truong hop 3: Main process khong bao loi, kill process dua tren chuoi title cua main window
                    strFileSub = strFile.Substring(strFile.LastIndexOf('\\') + 1, strFile.Length - 4 - strFile.LastIndexOf('\\'));
                    if (objProcess.MainWindowTitle.StartsWith(strFileSub)) { objProcess.Kill(); }
                }
            }

    Enjoy!

  3. #3
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Cách này hoàn toàn không được.
    Dùng NT Native API. Khi nào tui rãnh sẽ search lại trên hardisk của tui rồi post lên sau.

  4. #4
    Ngày gia nhập
    11 2007
    Bài viết
    79

    Thế này nhé.

    Chúng ta nên tập làm việc theo tác phong chuyên nghiệp một chút. Khi tôi viết một tut nào đó, tôi đã test thử cẩn thận và chắc chắn nó chạy tốt tôi mới dám post lên để các bạn cùng tham khảo. Nếu đoạn mã đó chạy có vấn đề trên máy của các bạn, làm ơn hãy chụp lại cái lỗi đó và nói thật cụ thể để anh em cùng nhau thảo luận tìm cách khắc phục hoặc chọn phương án khác tốt hơn.

    Còn nếu các bạn chỉ nói khơi khơi rằng đoạn mã này tồi dở, cách này không được blah blah... chỉ để chứng tỏ ta đây "giỏi" thì chẳng có tác dụng gì mà chỉ spam làm giảm giá trị của diễn đàn và khiến những thành viên tâm huyết chán nản bỏ sang các diễn đàn nước ngoài mà thôi. Bệnh thành tích, sĩ diện hão là một căn bệnh tệ hại của người Việt Nam các thế hệ trước, chúng ta không nên làm ăn theo phong cách đó nữa. Hãy thực tế một chút, bớt lý thuyết suông đi các bạn đồng ý chứ? Nói thế không phải là trách móc nhau mà để chúng ta cùng tiến bộ.

    Xin nhắc lại: Dù các bạn chưa có thời gian để viết một tut tốt hơn thì chí ít các bạn hãy nói rõ xem cái tut này nó "không được" ở điểm nào, lỗi báo ra như thế nào... Tôi test lại thì thấy rằng nó đáp ứng tất cả các yêu cầu chủ topic đã hỏi. Năm bảy chương trình đang mở cùng một file .txt đều bị tắt hết trong nháy mắt. Kill() chính là một method đóng gói lại cái NT API gì đó chứ API hash hiếc chẳng phải là cái gì cao siêu đâu.

    Hạn chế duy nhất trong tut trên đó là chỗ fixed code cho các trường hợp giống EXCEL. Thực tế thì có thể dễ dàng tìm main module từ sub module, nhưng khi test trên máy của tôi phát sinh Win32Exception và xuất hiện màn hình xanh dẫn đến treo máy, do đó tôi không dám đưa vào tut. Bây giờ tôi đưa lên để các bạn tham khảo.

    Đoạn code này:
    PHP Code:
    ProcessModule mModule objProcess.MainModule;
    strErrProcess mModule.ModuleName
    có thể dùng để thay thế đoạn fixed code này:
    PHP Code:
    if ("mscorlib" == strErrProcess) { strErrProcess "EXCEL"; } 

  5. #5
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    thực sự thì chuơng trình trên không chạy được , ít nhất trên máy của mình , dù sao cũng cám ơn . Nếu không làm được thì thôi, cũng chả cần lắm, mình thử mở swriter trước rồi mở word sau thấy nó cũng chỉ hiện thông báo rồi read only , không có kill cái khác (để người dùng tự xử ) và thấy việc này kể cũng không hay nếu kill phải cái người ta đang cần .
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  6. #6
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Mặc định Vấn đề tắt các chương trình đọc một file text nào đó

    Trích dẫn Nguyên bản được gửi bởi tienlbhoc Xem bài viết
    thực sự thì chuơng trình trên không chạy được , ít nhất trên máy của mình , dù sao cũng cám ơn . Nếu không làm được thì thôi, cũng chả cần lắm, mình thử mở swriter trước rồi mở word sau thấy nó cũng chỉ hiện thông báo rồi read only , không có kill cái khác (để người dùng tự xử ) và thấy việc này kể cũng không hay nếu kill phải cái người ta đang cần .
    Bạn tienlbhoc, Dr biết bạn là người thông minh và chịu khó tìm tòi, chịu khó học hỏi. Nhưng Dr thấy bạn cảm ơn người ta thế này thì lần sau còn ai dám giúp đỡ bạn nữa?

    Dr cũng không có ý gì trách bạn cả, Dr cũng cho rằng bạn không để ý đến câu nói của mình. Nhưng Dr mong muốn các bạn nên học cách hợp tác với người khác tốt hơn. Các bạn đồng ý chứ?

    Vấn đề ở đây có phải là chúng ta cùng nhau thảo luận: Làm thế nào đó để giải quyết vấn đề đưa ra? Nhưng đa số là người hỏi chỉ có hỏi không! Người hỏi hoàn toàn không nói rõ là vấn đề đã giải quyết được hay không, và nó đã giải quyết được như thế nào? Ý đồ của người hỏi ra sao, hầu như chẳng ai rõ, hoặc là rất mập mờ? (xuất phát từ tâm lý là sợ người khác biết, hay còn gọi là mắc bệnh giấu dốt của người đưa ra vấn đề thảo luận). Dẫn đến người biết cách giải quyết cũng sợ không dám tham luận, vì cũng sợ mình làm không đúng ý thì dễ bị dính một "Chưởng".

    @ccom: Dr rất thích tinh thần của bạn đó. Hi vọng là chúng ta có thể hợp tác tốt hơn! Bạn đồng ý chứ? Và Dr cũng mong muốn bạn có thêm một tính cách là: Không sợ phê bình và không tự ái. OK?
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  7. #7
    Ngày gia nhập
    11 2007
    Bài viết
    79

    Trích dẫn Nguyên bản được gửi bởi Dreaminess Xem bài viết
    Bạn tienlbhoc, Dr biết bạn là người thông minh và chịu khó tìm tòi, chịu khó học hỏi. Nhưng Dr thấy bạn cảm ơn người ta thế này thì lần sau còn ai dám giúp đỡ bạn nữa?

    Dr cũng không có ý gì trách bạn cả, Dr cũng cho rằng bạn không để ý đến câu nói của mình. Nhưng Dr mong muốn các bạn nên học cách hợp tác với người khác tốt hơn. Các bạn đồng ý chứ?

    Vấn đề ở đây có phải là chúng ta cùng nhau thảo luận: Làm thế nào đó để giải quyết vấn đề đưa ra? Nhưng đa số là người hỏi chỉ có hỏi không! Người hỏi hoàn toàn không nói rõ là vấn đề đã giải quyết được hay không, và nó đã giải quyết được như thế nào? Ý đồ của người hỏi ra sao, hầu như chẳng ai rõ, hoặc là rất mập mờ? (xuất phát từ tâm lý là sợ người khác biết, hay còn gọi là mắc bệnh giấu dốt của người đưa ra vấn đề thảo luận). Dẫn đến người biết cách giải quyết cũng sợ không dám tham luận, vì cũng sợ mình làm không đúng ý thì dễ bị dính một "Chưởng".

    @ccom: Dr rất thích tinh thần của bạn đó. Hi vọng là chúng ta có thể hợp tác tốt hơn! Bạn đồng ý chứ? Và Dr cũng mong muốn bạn có thêm một tính cách là: Không sợ phê bình và không tự ái. OK?
    Chính là như thế. Tôi đã nói những điều chân tình như trên thì các bạn cũng hiểu "tự ái" là khái niệm xa lạ đối với tôi. Nói cách khác, tôi khẳng định rằng muốn đất nước VN này ngóc đầu lên được thì trước tiên người VN phải bỏ đi hai đức tính xấu xí:

    1. Sĩ diện hão
    2. Tự ái vặt

    Hãy cùng thảo luận dựa trên trí tuệ chứ không để tình cảm lấn át, và cũng không được lẫn lộn giữa công việc chung và tình cảm riêng. Trong công việc chung có thể bất đồng gay gắt, cãi nhau tím mặt nhưng khi ra ngoài thì lại là anh em tốt. Có khuyết điểm thì khom cái lưng xuống mà nhận lỗi (giống người Nhật đó), chẳng có gì khó khăn cả. Bị phê bình chỉ trích là một niềm vinh hạnh đối với tôi.

    Cheers to all,

    ccom

  8. #8
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Cậu ccom nỗi tự ái rồi, không phải là tui nói vu vơ đâu, vì đã có nhiều phần mềm hệ thống đã làm vấn đề này, vd: Unlocker, Process Explorer. Hàm API thì tui nhớ mang máng là NtQueryFileInformation, và 1 số hàm # nữa.

  9. #9
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    218

    Sau vài lần phải restart máy, em phát hiện thấy lỗi sau:
    PHP Code:
        //Xu ly truong hop 1 va 2
                    
    if (objProcess.ProcessName.StartsWith(strErrProcess)) { objProcess.Kill(); } // Đây là dòng gây ra lỗi

                    //Xu ly truong hop 3: Main process khong bao loi, kill process dua tren chuoi title cua main window
                    
    strFileSub strFile.Substring(strFile.LastIndexOf('\\') + 1strFile.Length strFile.LastIndexOf('\\'));
                    if (
    objProcess.MainWindowTitle.StartsWith(strFileSub)) { objProcess.Kill(); } 
    Khi không có lỗi xảy ra strErrProcess mang giá trị "", khi dùng hàm StartsWith luôn cho kết quả đúng vì mọi chuỗi đều coi như bắt đầu với một chuỗi rỗng, dẫn tới kill sai process--> restart.
    Để sửa lại, thêm vào 1 lệnh if
    Code:
      if (strErrProcess != "")
                    {
                        //Xu ly truong hop 1 va 2
                        if (objProcess.ProcessName.StartsWith(strErrProcess)) { objProcess.Kill(); }
    
                        //Xu ly truong hop 3: Main process khong bao loi, kill process dua tren chuoi title cua main window
                        strFileSub = strFile.Substring(strFile.LastIndexOf('\\') + 1, strFile.Length - 4 - strFile.LastIndexOf('\\'));
                        if (objProcess.MainWindowTitle.StartsWith(strFileSub)) { objProcess.Kill(); }
                        // do something with this file here...
                    }
    Nhìn chung, em thấy đoạn mã này chạy được đấy chứ, ngoại trừ lỗi trên và việc ghi vô tội vạ vào file suýt nữa làm hỏng của em mấy file văn bản.

  10. #10
    Ngày gia nhập
    11 2007
    Bài viết
    79

    @TQN: Bạn nói rõ hơn được không? Cứ "mang máng" như thế thì tôi không hiểu gì cả. Tôi không tự ái gì hết, mong bạn đọc kỹ và hiểu rõ những điều tôi đã nói ở trên. Nói như bạn không giải quyết được vấn đề gì cả mà chỉ khiến anh em mâu thuẫn với nhau thôi. Tôi chưa bao giờ dám khinh thường bạn hay chụp mũ bạn ăn nói vu vơ, đừng hiểu lầm. Nếu tôi không lầm thì có thể chúng ta là người quen từ lâu bên reaonline đấy.

    @All: Sao vẫn có bạn không chạy được nhỉ? Hay các bạn thiếu cái này:

    PHP Code:
    using System.IO

Các đề tài tương tự

  1. Loại bỏ text trùng nhau từ một file text(.txt) - File văn bản
    Gửi bởi bossnabito trong diễn đàn Thắc mắc chung
    Trả lời: 7
    Bài viết cuối: 31-07-2011, 03:34 AM
  2. Đọc dữ liệu file midi dạng số HEX và lấy lời nhạc trong file ra file text
    Gửi bởi kimngockhtn_2007 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 29-06-2011, 04:40 PM
  3. Text File Protector - Bảo vệ file text bằng password (siêu ẩn)
    Gửi bởi gianghoplus trong diễn đàn Sản phẩm phần mềm của bạn
    Trả lời: 10
    Bài viết cuối: 08-05-2009, 09:27 AM
  4. Đọc file text? Đọc file dung lượng lớn? Lỗi lưu kết quả khi đọc nhiều lần?
    Gửi bởi totoise trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 19-04-2009, 08:21 PM
  5. Bai tap ve file!Tạo một file text trong đó mỗi dòng lưu 3 số nguyên
    Gửi bởi sonsdc trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 06-03-2009, 10:59 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn