Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Lỗi sử dụng OpenFileDialog khi lấy đường dẫn tương đối trong RichTextBox?

  1. #1
    Ngày gia nhập
    05 2011
    Bài viết
    38

    Mặc định Lỗi sử dụng OpenFileDialog khi lấy đường dẫn tương đối trong RichTextBox?

    Hi all,
    Mình có một button A chức năng load lên một RichTextBox. Đường dẫn tuyệt đối lưu file ABC.rtf
    E:\UI\Release\ABC.rtf

    Code:
    VC++.NET Code:
    1.              private: System::Void LoadRichTextBox(System::Object^  sender, System::EventArgs^  e) {
    2.                  
    3.                  System::String^ url =L"..\\UI\\Release\\ABC.rtf" ;
    4.                  MessageBox::Show(url);
    5.                  rtbEdit->LoadFile(url);
    6.                  
    7.              }

    Khi chạy thì chương trình load được file ABC.rtf.
    Tuy nhiên khi thêm một button B Dùng để Load thư mục chứa file log.
    Code :
    VC++.NET Code:
    1.              void GetLogFile()
    2.              {
    3.                  // Displays an OpenFileDialog so the user can select a LogFile.
    4.                  openFileDialog->Filter = "Log Files(*.txt)|*.txt";
    5.                  openFileDialog->Title = "Select a Log File";                    
    6.                  if(Convert::ToString(txtSaveLog->Text) != ""){
    7.                      openFileDialog->InitialDirectory = Convert::ToString(txtSaveLog->Text)+"\\";
    8.                      
    9.                  }
    10.                    
    11.                  // Show the Dialog.
    12.                  // If the user clicked OK in the dialog and a .txt file was selected, open it.
    13.                  if (openFileDialog->ShowDialog() == System::Windows::Forms::DialogResult::OK){                      
    14.                      std::wstring ws_temp = Bstr2Wstr(SysToStd(openFileDialog->FileName));
    15.                      LPCWSTR file_name = ws_temp.c_str();
    16.                      ShellExecute(NULL,L"open",L"notepad.exe",file_name,NULL,SW_SHOWNORMAL);
    17.                  }
    18.                
    19.              }

    Ví dụ: file log này được lưu D:\logs\123.txt;
    Khi bấm vào button B, chọn file txt (123.txt) để mở. Sau đó bấm vào lại button A, mở file ABC.rtf thì lúc này đường dẫn tương đối sẽ lấy đường dẫn của file log. Biến url lúc này là url =D:\\UI\\Release\\ABC.rtf. Và chương trình báo lỗi là không tìm được file ABC.rft vì file ABC.rtf được lưu ở ổ E.
    Test nhiều lần vẫn thấy url luôn phụ thuộc vào đường dẫn của logfile.
    Bạn nào giúp mình giải quyết vấn đề này với.
    Thanks all

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

    OpenFileDialog sẽ change current Directory chứ không phải là phụ thuộc vào file log. Bạn có vài cách để xử lý việc này:

    Cách 1: Lấy đường dẫn của thư mục file thực thi
    VC++.NET Code:
    1. Directory::GetParent(Assembly::GetExecutingAssembly()::Location);
    2. System::AppDomain::CrrentDomain::BaseDirectory

    Cách 2: Thay đổi CurrentDirectory sau mỗi lần kết thúc xử lý với OpenFileDialog
    VC+.NET Code:
    1. Directory::SetCurrentDirectory(path);

    Bạn nên tìm kiếm trước, những vấn đề như thế này ở cộng đồng C Việt có vô số...
    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!

  3. #3
    Ngày gia nhập
    05 2011
    Bài viết
    38

    Thanks bạn Kevin

    Mình đã thử cách trên :
    Directory::SetCurrentDirectory(path);
    với path ="Đường dẫn tuyệt đối" (E:\\test\\) thì có thể change thu mục được
    Nhưng với path ="..\\" thì thư mục hiện tại vẫn là thư mục của OpenFileDialog.
    Mình muốn thư mục chứa file ACB.rtf là một thư mục do người dùng chỉ định

    Thanks!

  4. #4
    Ngày gia nhập
    02 2011
    Nơi ở
    Tp.HCM
    Bài viết
    124

    Winxp không thay đổi thư mục hiện thời của chương trình, Win vista trở về sau bị lỗi.

    Sửa lại:
    C++ Code:
    1. private: System::Void LoadRichTextBox(System::Object^  sender, System::EventArgs^  e) {
    2.                  
    3.                  System::String^ url =System::AppDomain.CrrentDomain::BaseDirectory + L"\\..\\UI\\Release\\ABC.rtf" ; //Kiểm tra lại phép toán cộng chuỗi, vì mình không làm C++.net
    4.                  MessageBox::Show(url);
    5.                  rtbEdit->LoadFile(url);
    6.                  
    7.              }

  5. #5
    Ngày gia nhập
    05 2011
    Bài viết
    38

    Thanks bạn LieuLuc
    Mình đang chay winxp sp3 và chương trình của mình hiện tại đang bị lỗi OpenFileDialog change current Directory.

    Mình vẫn chưa xử lý được vấn đề set lại giá trị của đường dẫn hiện thời là một đường dẫn tương đối.
    Mình sửa lại thế này, nhưng chỉ đúng khi gọi OPenFileDialog lần đầu.
    Visual C++ Code:
    1.              void GetLogFile()
    2.              {
    3.                  System::String^ url =L"..\\UI\\Release\\EULA.rtf" ;
    4.                  System::String^ path;
    5.                  System::String^ dPath ;
    6.              
    7.                  DirectoryInfo^ di1 = gcnew DirectoryInfo(url);
    8.                  dPath =  di1->FullName;
    9.                  dPath = dPath->Substring(0,dPath->Length -8);
    10.                  openFileDialog->Filter = "Log Files(*.txt)|*.txt";
    11.                  openFileDialog->Title = "Select a Log File";                    
    12.                  if(Convert::ToString(txtSaveLog->Text) != ""){
    13.                      openFileDialog->InitialDirectory = Convert::ToString(txtSaveLog->Text)+"\\";
    14.                  }
    15.                  // Show the Dialog.
    16.                  // If the user clicked OK in the dialog and a .txt file was selected, open it.
    17.                  if (openFileDialog->ShowDialog() == System::Windows::Forms::DialogResult::OK){
    18.                      std::wstring ws_temp = Bstr2Wstr(SysToStd(openFileDialog->FileName));
    19.                      LPCWSTR file_name = ws_temp.c_str();
    20.                      ShellExecute(NULL,L"open",L"notepad.exe",file_name,NULL,SW_SHOWNORMAL);
    21.                      Directory::SetCurrentDirectory(dPath);
    22.                  }
    23.              }
    Chạy lần đầu biến dPath lấy đúng đường dẫn (vdu "E:\tets\UI\Release\")
    Nhưng chạy lần thứ 2 đường dẫn dPath được cộng thêm "\UI" nữa : (vdu "E:\tets\UI\UI\Release\")
    Chạy lần 3 dPath cộng thêm "\UI\UI" (vdu: E:\tets\UI\UI\UI\Release\)

    Sau một lần mở Dialog là dPath được cộng thêm "\UI" nữa.
    Xin hỏi có cách nào để giữ nguyên bến dPath như lần đầu chạy hay kô? (vdu "E:\tets\UI\Release\")
    Thanks!

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

    Mặc định Lỗi sử dụng OpenFileDialog khi lấy đường dẫn tương đối trong RichTextBox?

    Với code của bạn, nếu người dùng không nhấn OK, không nhấn Yes, thì current directory sẽ thế nào?

    SetCurrentDirectory hoạt động rất tốt đấy chứ? Có lẽ nó sẽ như sau:
    Directory::SetCurrentDirectory(System::AppDomain:: CrrentDomain::BaseDirectory);

    PS: Chú ý tuân thủ luật lệ tham gia. Bạn sẽ có khả năng bị ban ngay tức khắc nếu tiếp tục có những hành động không tuân thủ.
    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
    07 2009
    Nơi ở
    chu văn an
    Bài viết
    13

    Mặc định bạn lưu cái location vào biến trước, làm xong thì set nó lại là dc mà

    Code:
    string mylocation = System.IO.Directory.GetCurrentDirectory().ToString();
    OpenFileDialog dlg = new OpenFileDialog();
    dlg.Filter = "JPG Files(*.JPG)|*.JPG|GIF Files(*.GIF)|*.GIF";
    if (dlg.ShowDialog(this) == DialogResult.OK)
                {
                    pictureBox1.ImageLocation = dlg.FileName;
                }
    Directory.SetCurrentDirectory(mylocation);

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

  1. đường dẫn tương đối trong openfiledialog C#
    Gửi bởi thanhtienspkt trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 04-05-2012, 08:25 PM
  2. Cách sử dụng OpenFileDialog trong lập trình C#
    Gửi bởi thaibeo17 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 10-04-2012, 11:21 PM
  3. Xử lý OpenFileDialog trong WinsForm
    Gửi bởi hugovsmoon trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 19
    Bài viết cuối: 18-12-2010, 04:09 PM
  4. Tạo openfiledialog trong VC++.NET như thế nào?
    Gửi bởi libach202 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 17-08-2010, 11:01 PM
  5. Cách dùng saveFileDialog va openFileDialog trong C#
    Gửi bởi cndragon trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 20-02-2009, 01:46 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