เปลี่ยนนามสกุลไฟล์โดยใช้ C #


99

ฉันมีไฟล์หลายประเภท: pdf, tiff, jpeg, bmp ฯลฯ คำถามของฉันคือฉันจะเปลี่ยนนามสกุลไฟล์ได้อย่างไร? ฉันลองสิ่งนี้:

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

ไม่ว่าจะเป็นไฟล์ประเภทใดรูปแบบที่ฉันระบุจะต้องเป็นชื่อไฟล์ แต่มันไม่ได้ผล ฉันได้รับเส้นทางไฟล์จากเบราว์เซอร์เช่นc:\..\..\a.jpgและรูปแบบไฟล์คือa.jpeg. ดังนั้นเมื่อฉันพยายามลบมันทำให้ฉันมีข้อผิดพลาด: Cannot find the file on specified path'. ดังนั้นฉันคิดว่ามันมีส่วนเกี่ยวข้องกับนามสกุลไฟล์ที่ไม่ตรงกัน ดังนั้นฉันจึงพยายามแปลง.jpgเป็น.jpegและลบไฟล์นั้น


มันไม่ทำงานอย่างไร (นอกเหนือจากการรวบรวมข้อมูล)
Albin Sunnanbo

คำตอบ:


221

มี: Path.ChangeExtensionวิธีการ เช่น:

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

ในกรณีที่คุณต้องการเปลี่ยนนามสกุลจริงคุณสามารถใช้File.Moveวิธีการ:

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

ดังนั้นจะเปลี่ยนนามสกุลเป็น jpg หรือไม่? ของไฟล์ต้นฉบับ?
safi

@ Alex ฉันไม่ได้ย้ายไฟล์ฉันได้รับเส้นทางไฟล์จาก broswer เช่น c: \ .. \ .. \ a.jpg และรูปแบบไฟล์บนเส้นทางฟิสิคัลคือ a.Jpeg ดังนั้นเมื่อฉันพยายามที่จะลบมัน ทำให้ฉันมีข้อผิดพลาดไม่พบไฟล์ในเส้นทางที่ระบุ ดังนั้นฉันคิดว่ามันมีส่วนเกี่ยวข้องกับนามสกุลไฟล์ไม่ตรงกัน ดังนั้นฉันจึงพยายามแปลง jpg เป็น Jpeg และลบไฟล์นั้น
safi

3
@safi: ฉันสงสัยว่าการเปลี่ยนนามสกุลไฟล์เป็นเช่นตัวพิมพ์ใหญ่จะทำให้พบไฟล์ในดิสก์ แน่ใจหรือไม่ว่าไฟล์c:\..\..\a.jpg(ในตัวอย่างของคุณ) มีอยู่จริง ถ้าใช่คุณอาจไม่มีสิทธิ์เพียงพอที่จะลบไฟล์นี้หรือไม่? และสุดท้ายถ้าคุณเพียงต้องการที่จะเข้ามาแทนที่การใช้ไฟล์นามสกุลvar newFilePath = Path.ChangeExtension(myffile, ".Jpg");; newFilePathจะมีชื่อไฟล์ใหม่ที่มีการขยายการเปลี่ยนแปลงทางร่างกายชื่อไฟล์ (บนดิสก์) จะไม่มีการเปลี่ยนแปลง
Alex

1
@safi: ดูสิ่งนี้var newPath = Path.ChangeExtension("c:/my documents/my images/cars/a where a is a.jpg", string.Empty)จะลบส่วนขยายออกจากเส้นทางที่กำหนดเป็นพารามิเตอร์วิธีแรก newPathตัวแปรสตริงจะมีc:/my documents/my images/cars/a where a is a.ค่าหลังจากการดำเนินการนี้
Alex

1
มีหลายสิ่งที่เราสร้างโค้ดสำหรับ แต่มีอยู่แล้วใน. NET fx File.Move& Path.ChangeExtension. เจ๋ง! :-)
ตำนาน

17

คุณควรย้ายไฟล์เพื่อเปลี่ยนชื่อ ในโค้ดตัวอย่างของคุณคุณกำลังเปลี่ยนสตริงเท่านั้นไม่ใช่ไฟล์:

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

คุณกำลังเปลี่ยน myfile (ซึ่งเป็นสตริง) เท่านั้น ในการย้ายไฟล์จริงคุณควรทำ

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

ดูFileInfo.MoveTo


ฉันไม่ได้ย้ายไฟล์ฉันได้รับเส้นทางไฟล์จาก broswer เช่น c: \ .. \ .. \ a.jpg และรูปแบบไฟล์บนเส้นทางฟิสิคัลคือ a.Jpeg ดังนั้นเมื่อฉันพยายามลบมันจะให้ ข้อผิดพลาดไม่พบไฟล์บนเส้นทางที่ระบุ ดังนั้นฉันคิดว่ามันมีส่วนเกี่ยวข้องกับนามสกุลไฟล์ไม่ตรงกัน ดังนั้นฉันกำลังพยายามแปลง jpg เป็น Jpeg และลบไฟล์แล้ว
safi

รหัสแรกไม่ได้ทำการแทนที่ใด ๆ คุณต้องทำmyfile=myfile.Replace(extension,".Jpeg");
KansaiRobot


4

เมธอดGetFileNameWithoutExtensionตามชื่อจะไม่ส่งคืนนามสกุลในไฟล์ ในกรณีของคุณมันจะส่งกลับ "a" เท่านั้น คุณต้องการเพิ่ม ".Jpeg" ของคุณต่อท้ายผลลัพธ์นั้น อย่างไรก็ตามในระดับที่แตกต่างกันสิ่งนี้ดูแปลกเนื่องจากไฟล์ภาพมีข้อมูลเมตาที่แตกต่างกันและไม่สามารถแปลงได้อย่างง่ายดาย


0

แปลงรูปแบบไฟล์เป็น 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*/
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.