2010-10-01 43 views
12

Tôi đang cố thêm một phần mở rộng vào một tập tin được chọn trong một ứng dụng C# OpenFileDialog. Tôi đang gặp khó khăn với các tệp chưa có phần mở rộng.Thêm phần mở rộng tập tin vào tập tin mở rộng ít hơn

Trong khi tôi đã không kiểm tra các phương pháp sau đây trên các tập tin với một phần mở rộng, tôi biết rằng nó không hoạt động cho các tập tin mà không một phần mở rộng (mà thực sự là những gì tôi muốn làm việc với ở đây).

string tPath = videoPath + videoName; 
string tPath2 = Path.ChangeExtension(tPath, ".yuv"); 

tPath2 sẽ phản ánh vào tiêu đề thay đổi, nhưng có vẻ như không ảnh hưởng đến các tập tin riêng của mình, chỉ có chuỗi trả về bởi phương pháp ChangeExtension. Tôi chỉ cần tiếp tục và sao chép tệp vào một tệp mới có tên và tiện ích thích hợp, nhưng chúng tôi đang nói về lớn, các tệp video HD không nén. Có cách nào để sử dụng tPath2 với đối tượng File hoặc FileInfo mà tôi đang thiếu không?

Tôi đánh giá cao bất kỳ hỗ trợ nào mà bất kỳ ai cũng có thể cung cấp cho tôi tại đây. Cảm ơn.

Trả lời

3

Để thực hiện đổi tên của bạn mà không cần phải tạo một bản sao, thêm dòng này ở cuối:

System.IO.File.Move(tPath, tPath2); 

(File.Move(src, dst) làm điều tương tự mà FileInfo.MoveTo(dst) không)

Đối với vấn đề của bạn các tập tin mà không cần tiện ích mở rộng, hãy thử cách này:

if(string.IsNullOrEmpty(Path.GetExtension(tPath)){ 
    tPath += ".yuv"; 
} 
+1

Điều này cũng hoạt động khá tốt. Tiết kiệm cho tôi phải tạo một thể hiện FileInfo. –

+0

Rất vui được giúp đỡ một số người; các lớp FileInfo/File và DirectoryInfo/Directory có rất nhiều chức năng giống như vậy, để chúng có thể hoạt động hiệu quả khi bạn có nhiều thao tác để thực hiện trên cùng một cá thể (sử dụng các lớp cá thể), hoặc chỉ một thao tác đơn (sử dụng các lớp tĩnh). Nó khá hữu ích, imo! –

+0

@Rich: Không phải là nó cực kỳ quan trọng, nhưng tôi tò mò tại sao điều này được đánh dấu là câu trả lời khi tôi đăng cùng một giải pháp vài phút trước đó. –

10

Lớp Path chỉ cho phép bạn thực hiện thao tác trên một tệp đường dẫn (có nghĩa là string) ở mức cao, không phải là tệp.

Bạn sẽ cần sử dụng File.Move để đổi tên tệp (bao gồm cả chỉ thêm tiện ích mở rộng).

string tPath = videoPath + videoName; 
string tPath2 = Path.ChangeExtension(tPath, ".yuv"); 

File.Move(tPath, tPath2); //effectively changes the extension 
3

Bạn cần thực sự gọi FileInfo.MoveTo để đổi tên tệp. Một tập tin đổi tên, trên cùng một ổ đĩa vật lý, thường là một hoạt động nhanh, do đó, nó không thực sự quan trọng là tập tin là rất lớn.

+0

Hãy thử điều đó ngay bây giờ. Nhìn về phía trước mặc dù. –

+0

Đó là nó. Tôi sẽ đánh dấu đây là câu trả lời trong 4 phút ... –

3

Bạn chỉ thay đổi tên tệp để tại sao bạn không thực hiện "mypath" + ".ext"?

Không có gì về thay đổi tiện ích tệp cần phải thay đổi nội dung của tệp, nó chỉ cho hệ điều hành biết phải làm gì với nó.

+0

Đúng vậy, nhưng tôi không cần phải làm việc với chuỗi; Tôi cần phải có hệ điều hành thay đổi phần mở rộng của tập tin. Tôi có thể thiếu một cái gì đó bạn đang nói mặc dù ... Sẽ không phải là lần đầu tiên. –

+1

Tôi cho rằng điều tôi muốn nói là lớp Path chỉ cung cấp một loạt các phương thức tiện ích để thao tác chuỗi các đường dẫn. Nếu bạn thực sự muốn thay đổi đường dẫn của tệp thực, bạn cần sử dụng lớp Tệp, như những người khác đã chỉ ra. –

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