Змінити розширення файлів за допомогою C #


98

У мене багато типів файлів: 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і видалити файл тоді.


Як це не працює (окрім того, що далеко від компіляції)?
Альбін Суннанбо

Відповіді:


219

Є: 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буде містити ім'я файла з розширенням змінилися, фізично, ім'я файлу (на диску) не змінено.
Олексій

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.значення після цієї операції.
Олексій

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");

ви змінюєте лише мій файл (який є рядком). Щоб перемістити фактичний файл, вам слід це зробити

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

Див. FileInfo.MoveTo


Я не переміщую файл, я отримую шлях до файлу broswer, як c: \ .. \ .. \ a.jpg, а формат файлу на фізичному шляху - a.Jpeg, тому коли я намагаюся його видалити, він дає мені помилка не може знайти файл на вказаному шляху. тому я думаю, що це пов’язано із розширенням файлу, яке не відповідає. тому я намагаюся перетворити jpg в Jpeg і видалити файл, тоді
сафі

Перший код не робить жодної заміни. Вам потрібно це зробитиmyfile=myfile.Replace(extension,".Jpeg");
KansaiRobot


4

Метод GetFileNameWithoutExtension, як випливає з назви, не повертає розширення у файл. У вашому випадку він поверне лише "а". Ви хочете додати свій результат .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*/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.