2012-03-10 46 views
7

Khi tìm kiếm tệp trong Windows Explorer và nhấp chuột phải vào tệp từ kết quả tìm kiếm; có một tùy chọn: "Mở vị trí tệp". Tôi muốn thực hiện tương tự trong C# WinForm của tôi. Tôi đã làm điều này:Mở vị trí tệp

if (File.Exists(filePath) 
{ 
    openFileDialog1.InitialDirectory = new FileInfo(filePath).DirectoryName; 
    openFileDialog1.ShowDialog(); 
} 

Có cách nào tốt hơn để làm điều đó không?

+1

Vấn đề bạn phải đối mặt với giải pháp của mình là gì? nếu 'openFileDialog_View' là một OpenFileDialog thì bạn sẽ chỉ nhận được một hộp thoại nhắc người dùng mở ** một tệp. – gideon

+0

Tôi muốn bất kỳ cách thay thế và tốt hơn nếu có? –

+1

Xem câu trả lời của tôi sau đó :) – gideon

Trả lời

28

Nếu openFileDialog_ViewOpenFileDialog thì bạn sẽ chỉ nhận được hộp thoại nhắc người dùng mở tệp. Tôi giả sử bạn muốn thực sự mở vị trí trong trình khám phá.

Bạn sẽ làm điều này:

if (File.Exists(filePath)) 
{ 
    Process.Start("explorer.exe", filePath); 
} 

Để chọn một file explorer.exe nhận một đối số /select như thế này:

explorer.exe /select, <filelist> 

Tôi nhận này từ một SO bài: Opening a folder in explorer and selecting a file

Vì vậy, mã sẽ là:

if (File.Exists(filePath)) 
{ 
    Process.Start("explorer.exe", "/select, " + filePath); 
} 
+0

điều này sẽ là "explorer.exe" – scartag

+0

tốt đẹp Mr. gideon. nhưng tôi muốn tập tin đó được chọn, Làm thế nào? –

+1

@H_wardak Đã cập nhật câu trả lời của tôi. Một [google search] đơn giản (http://www.google.co.in/webhp?sourceid=chrome-instant&ix=sea&ie=UTF-8&ion=1#hl=vi&output=search&sclient=psy-ab&q=open%20explorer%20and % 20select% 20file & oq = & aq = & aqi = & aql = & gs_sm = & gs_upl = & gs_l = & pbx = 1 & fp = 237055d012d02b32 & ix = biển & ion = 1 & bav = on.2, hoặc.r_gc.r_pw.r_cp.r_qf., Cf.osb & biw = 1366 & bih = 643) đã đưa tôi đến bài đăng SO đó. – gideon

4

Đây là cách tôi làm điều đó trong mã của mình. Thao tác này sẽ mở thư mục tệp trong trình khám phá và chọn tệp được chỉ định theo cách mà trình khám phá cửa sổ thực hiện.

if (File.Exists(path)) 
{ 
    Process.Start(new ProcessStartInfo("explorer.exe", " /select, " + path); 
} 
+1

có lợi ích gì không nếu tôi sử dụng "ProcessStartInfo"? Nó hoạt động mà không có nó. –

Các vấn đề liên quan