Изменить расширение файла с помощью 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и удалить файл тогда.


Как это не работает (кроме того, что он далек от компиляции)?
— Альбин Суннанбо

Ответы:


220

Есть: Path.ChangeExtensionметод. Например:

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

В случае, если вы также хотите физически изменить расширение, вы можете использовать File.Moveметод:

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

так он изменит расширение на jpg? оригинального файла?
— safi

@Alex Я не перемещаю файл, я получаю путь к файлу от браузера, например 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. Прохладно ! :-)
— Legends

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


Я не перемещаю файл, я получаю путь к файлу от браузера, например 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.