2009-09-09 28 views
6

Tôi nghĩ câu hỏi này có thể tầm thường đối với hầu hết các bạn nhưng bằng cách nào đó tôi không thể tìm thấy câu trả lời ... vì vậy, tôi có một giải pháp Visual Studio 2008 foo và thanh dự án trong giải pháp này. Trong thanh-Dự án của tôi đã có một thư mục gọi là baz, nó trông như thế này:C# mở tập tin trong một giải pháp

foo dir 
| 
+-> bar dir 
     | 
     +-> baz dir 
      | 
      +-> asd file 

bây giờ tôi muốn mở "tập tin asd" của tôi trong thanh-dự án nhưng cần con đường chính xác để "tập tin asd" , làm thế nào tôi có thể tìm thấy nó? Tôi đã thử chỉ đơn giản là "baz \ asd" nhưng nó không hoạt động.

Cảm ơn!

J

Trả lời

2

Nếu bạn có nghĩa là mở khi chạy, chương trình thực sự chạy trong thanh \ bin \ debug (hoặc thanh \ bin \ phát hành), vì vậy bạn cần phải chiếm cho điều đó.

Thông thường tôi sẽ làm một cái gì đó như:

#if DEBUG 
filename = @"..\..\baz\asd"; 
#else 
filename = @"baz\asd"; 
#endif 
+0

Điều này sẽ không hoạt động bên ngoài Visual Studio nếu tệp không được sao chép vào thư mục đầu ra. – user7116

+0

Đối với chế độ phát hành, trình cài đặt của tôi sao chép tất cả các tệp mà chương trình cần. Tôi không sử dụng trình cài đặt tích hợp (tôi sử dụng NSIS). Điều đó có yêu cầu tệp phải được đánh dấu là nội dung để nó được chọn không? –

+0

Vâng, trình cài đặt cần chúng như Nội dung và được sao chép. – user7116

9

Bạn muốn mở tập tin trong bar -project khi chạy trong một ứng dụng C#? Có một vài cách để thực hiện việc này và tôi sẽ cung cấp cho bạn cách dễ nhất.

  1. Chuyển đến Thuộc tính cho asd trong Solution Explorer
  2. Đặt Build Action để Content
  3. Đặt Copy to Output mục như Copy always (hoặc Copy if newer)

Bạn không thể hen tham khảo các tập tin như sau trong C# (giả sử chương trình của bạn không thay đổi thư mục làm việc hiện tại ra khỏi thực thi mục):

using (StreamReader reader = new StreamReader(@"baz\asd")) 
{ 
    // ... 
} 

Những cách khác liên quan đến using embedded resources, mà không phải là những cô đọng nhất của các giải pháp .

+0

Sao chép loại tệp này vào thư mục đầu ra để lại cho bạn hai bản sao trên đĩa. Điều này là tốt nếu các tập tin nhỏ và ít. –

+1

Tôi đồng ý, nhưng nó là dễ nhất. Bất kể, nhúng tài nguyên thay vì để nó trên đĩa vẫn chiếm không gian. – user7116

+1

Tôi không sao chép hoặc nhúng trong khi gỡ lỗi, chỉ cần để nguyên các tệp mà chúng đang ở đó. Đối với bản phát hành bản phát hành, trình cài đặt của tôi (tôi sử dụng NSIS) chịu trách nhiệm cài đặt các tệp được yêu cầu trên máy mục tiêu. –

2

Vị trí tương đối của tệp là thư mục giải pháp. Vì vậy, để mở nó trong VS IDE, bạn có thể gõ vào cửa sổ Command hoặc Find textbox trên thanh công cụ Standard (Ctrl-D):

>open bar\baz\asd 

Nếu bạn muốn làm điều đó trong thời gian chạy, bạn cần phải phân phối các tệp nguồn với ứng dụng của bạn, vì không có gì đảm bảo nó sẽ thực thi ở bất kỳ đâu gần cây giải pháp.

Nếu bạn muốn làm điều đó từ VS Add-In, tôi chắc chắn có một lớp đại diện cho giải pháp, bạn có thể sử dụng để liệt kê các dự án bên trong nó và liệt kê các mục nhập trong dự án thanh.

0

Có thể tốt hơn nếu thêm Mục tiêu đơn giản vào tệp Xây dựng (Tệp dự án - csproj cho C#).Mở tập tin csproj trong chế độ văn bản và thêm:


< Target Name = "AfterBuild" > < Sao chép SourceFiles = "<SourceFileLocationRelativeToPrjFile> \ <SourceFilename> "DestinationFiles =" <SourceFilename>" />
</Target >

MS Build sẽ đảm bảo sao chép tệp của bạn đến đúng nơi - đó là thư mục phù hợp bất kể Cấu hình của bạn (Gỡ lỗi/Phát hành) là gì.

Nếu bạn quan tâm đến Xuất bản, bạn sẽ cần phải đi thêm một dặm, nhưng tôi đoán, bạn không yêu cầu điều đó ngay bây giờ - vì vậy, sẽ giữ cho nó đơn giản.

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