Thay đổi phần mở rộng tệp bằng C #


98

Tôi có nhiều loại tệp: pdf, tiff, jpeg, bmp. vv Câu hỏi của tôi là làm cách nào để thay đổi phần mở rộng tệp? Tôi đã thử điều này:

my file= c:/my documents/my images/cars/a.jpg;
string extension = Path.GetExtension(myffile);
myfile.replace(extension,".Jpeg");

Bất kể đó là loại tệp nào, định dạng tôi chỉ định phải cùng với tên tệp. Nhưng nó không hoạt động. Tôi nhận được đường dẫn tệp từ trình duyệt như c:\..\..\a.jpg, và định dạng tệp là a.jpeg. Vì vậy, khi tôi cố gắng để xóa nó, nó mang lại cho tôi một lỗi: Cannot find the file on specified path'. Vì vậy, tôi đang nghĩ rằng nó có liên quan gì đó đến phần mở rộng tệp không khớp. Vì vậy, tôi đang cố gắng chuyển đổi .jpgsang .jpegvà xóa tệp sau đó.


Làm thế nào nó không hoạt động, (ngoài việc biên dịch)?
Albin Sunnanbo

Câu trả lời:


219

Có: Path.ChangeExtensionphương pháp. Ví dụ:

var result = Path.ChangeExtension(myffile, ".jpg");

Trong trường hợp nếu bạn cũng muốn thay đổi tiện ích mở rộng, bạn có thể sử dụng File.Movephương pháp:

File.Move(myffile, Path.ChangeExtension(myffile, ".jpg"));

vậy nó sẽ thay đổi phần mở rộng thành jpg? của tệp gốc?
safi

@Alex Tôi không di chuyển tệp, tôi lấy đường dẫn tệp từ broswer như c: \ .. \ .. \ a.jpg và định dạng tệp trên đường dẫn vật lý là a.Jpeg, vì vậy khi tôi cố gắng xóa nó, nó cho tôi lỗi không thể tìm thấy tệp trên đường dẫn được chỉ định. vì vậy tôi đang nghĩ rằng nó có một số liên quan đến phần mở rộng tệp không khớp. vì vậy tôi đang cố gắng chuyển đổi jpg sang Jpeg và xóa tệp sau đó.
safi

3
@safi: Tôi nghi ngờ rằng việc thay đổi phần mở rộng tệp thành ví dụ như chữ hoa sẽ định vị tệp trên đĩa. Bạn có chắc chắn tệp c:\..\..\a.jpg(trong ví dụ của bạn) thực sự tồn tại? Nếu có, có thể bạn không có đủ quyền riêng tư để xóa tệp này? Và cuối cùng, nếu bạn chỉ muốn thay thế việc sử dụng phần mở rộng tệp var newFilePath = Path.ChangeExtension(myffile, ".Jpg");; những newFilePathsẽ chứa một tên tập tin mới với thay đổi phần mở rộng, thể chất, tên file (trên đĩa) sẽ không được thay đổi.
Alex

1
@safi: xem, điều này var newPath = Path.ChangeExtension("c:/my documents/my images/cars/a where a is a.jpg", string.Empty)sẽ xóa phần mở rộng khỏi đường dẫn được xác định là tham số phương thức đầu tiên; các newPathbiến chuỗi sẽ chứa c:/my documents/my images/cars/a where a is a.giá trị sau phẫu thuật này.
Alex

1
Có rất nhiều thứ chúng tôi tạo mã, nhưng đã tồn tại trong .NET fx. File.Move& Path.ChangeExtension. Mát mẻ ! :-)
Huyền thoại

17

Bạn nên di chuyển tệp để đổi tên tệp. Trong mã ví dụ của bạn, bạn chỉ thay đổi chuỗi, không thay đổi tệp:

myfile= "c:/my documents/my images/cars/a.jpg";
string extension = Path.GetExtension(myffile); 
myfile.replace(extension,".Jpeg");

bạn chỉ thay đổi myfile (là một chuỗi). Để di chuyển tệp thực tế, bạn nên làm

FileInfo f = new FileInfo(myfile);
f.MoveTo(Path.ChangeExtension(myfile, ".Jpeg"));

Xem FileInfo.MoveTo


Tôi không di chuyển tệp, tôi nhận được đường dẫn tệp từ broswer như c: \ .. \ .. \ a.jpg và định dạng tệp trên đường dẫn vật lý là a.Jpeg, vì vậy khi tôi cố gắng xóa nó, nó sẽ cho tôi lỗi không thể tìm thấy tệp trên đường dẫn được chỉ định. vì vậy tôi đang nghĩ rằng nó có một số liên quan đến phần mở rộng tệp không khớp. vì vậy tôi đang cố gắng để chuyển đổi jpg để Jpeg và xóa các tập tin sau đó
Safi

Mã đầu tiên không thay thế bất kỳ. Bạn cần làmmyfile=myfile.Replace(extension,".Jpeg");
KansaiRobot


4

Phương thức GetFileNameWithoutExtension, như tên của nó, không trả về phần mở rộng trên tệp. Trong trường hợp của bạn, nó sẽ chỉ trả về "a". Bạn muốn nối ".Jpeg" của mình vào kết quả đó. Tuy nhiên, ở một cấp độ khác, điều này có vẻ lạ, vì các tệp hình ảnh có siêu dữ liệu khác nhau và không thể chuyển đổi dễ dàng như vậy.


0

Chuyển đổi định dạng tệp thành png

string newfilename , 
 string filename = "~/Photo/"  + lbl_ImgPath.Text.ToString();/*get filename from specific path where we store image*/
 string newfilename = Path.ChangeExtension(filename, ".png");/*Convert file format from jpg to png*/
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.