Alterar extensão de arquivo usando C #


98

Tenho muitos tipos de arquivo: pdf, tiff, jpeg, bmp. etc. Minha pergunta é como posso mudar a extensão do arquivo? Eu tentei isso:

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

Não importa o tipo de arquivo, o formato que eu especificar deve estar com o nome do arquivo. Mas não funciona. Eu obtenho o caminho do arquivo do navegador c:\..\..\a.jpg, e o formato do arquivo é a.jpeg. Então, quando eu tentar excluí-lo, dá-me um erro: Cannot find the file on specified path'. Então, estou pensando que tem algo a ver com a extensão do arquivo que não corresponde. Então, eu estou tentando converter .jpgpara .jpege excluir o arquivo depois.


Como não funciona, (além de estar longe de compilar)?
Albin Sunnanbo

Respostas:


219

Existe: Path.ChangeExtensionmétodo. Por exemplo:

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

No caso, se você também deseja alterar fisicamente a extensão, você pode usar o File.Movemétodo:

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

então vai mudar a extensão para jpg? do arquivo original?
safi de

@Alex Não estou movendo um arquivo, obtenho o caminho do arquivo do navegador como c: \ .. \ .. \ a.jpg, e o formato do arquivo no caminho físico é a.Jpeg, portanto, quando tento excluí-lo, ele dá-me erro não consigo encontrar o arquivo no caminho especificado. então eu estou pensando que tem algo a ver com a extensão do arquivo não é compatível. então estou tentando converter jpg para jpeg e excluir o arquivo.
safi de

3
@safi: Duvido que alterar a extensão do arquivo para, por exemplo, maiúsculas localize um arquivo no disco. Tem certeza de que o arquivo c:\..\..\a.jpg(no seu exemplo) realmente existe? Se sim, talvez você não tenha privilégios suficientes para excluir este arquivo? E, finalmente, se você deseja apenas substituir o uso de extensão de arquivo var newFilePath = Path.ChangeExtension(myffile, ".Jpg");; O newFilePathirá conter um novo nome de arquivo com extensão alterada, fisicamente, o nome do arquivo (no disco) não será alterado.
Alex

1
@safi: veja, isso var newPath = Path.ChangeExtension("c:/my documents/my images/cars/a where a is a.jpg", string.Empty)removerá a extensão do caminho definido como o primeiro parâmetro do método; a newPathvariável string conterá o c:/my documents/my images/cars/a where a is a.valor após esta operação.
Alex

1
Há tantas coisas para as quais criamos código, mas já existe no .NET fx. File.Move& Path.ChangeExtension. Legal ! :-)
Legends

17

Você deve mover o arquivo para renomeá-lo. Em seu código de exemplo, você está apenas alterando a string, não o arquivo:

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

você está apenas mudando meuarquivo (que é uma string). Para mover o arquivo real, você deve fazer

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

Veja FileInfo.MoveTo


Não estou movendo um arquivo, obtenho o caminho do arquivo de broswer como c: \ .. \ .. \ a.jpg, e o formato do arquivo no caminho físico é a.Jpeg, então quando tento excluí-lo, ele me mostra erro não pode localizar o arquivo no caminho especificado. então eu estou pensando que tem algo a ver com a extensão do arquivo não é compatível. estou tentando converter jpg para jpeg e excluir o arquivo
safi

O primeiro código não faz nenhuma substituição. Você precisa fazermyfile=myfile.Replace(extension,".Jpeg");
KansaiRobot de


4

O método GetFileNameWithoutExtension, como o nome indica, não retorna a extensão no arquivo. No seu caso, ele retornaria apenas "a". Você deseja anexar seu ".Jpeg" a esse resultado. No entanto, em um nível diferente, isso parece estranho, pois os arquivos de imagem têm metadados diferentes e não podem ser convertidos tão facilmente.


0

Converter formato de arquivo para 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*/
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.