C # Kullanarak Dosya Uzantısını Değiştirin


99

Birçok dosya türüm var: pdf, tiff, jpeg, bmp. vb. Sorum şu: Dosya uzantısını nasıl değiştirebilirim? Bunu denedim:

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

Ne tür bir dosya olursa olsun, belirttiğim format dosya adıyla birlikte olmalıdır. Ama bu çalışmıyor. Tarayıcıdan dosya yolu alıyorum c:\..\..\a.jpgve dosya biçimi a.jpeg. Bunu silmeye, yani, bana bir hata veriyor: Cannot find the file on specified path'. Bu yüzden, eşleşmeyen dosya uzantısıyla bir ilgisi olduğunu düşünüyorum. Yani, dönüştürmek çalışıyorum .jpgiçin .jpegve dosyayı silin.


Nasıl çalışmaz (derlemekten uzak olması dışında)?
Albin Sunnanbo

Yanıtlar:


221

Orada: Path.ChangeExtensionyöntemi. Örneğin:

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

Uzantıyı fiziksel olarak da değiştirmek istiyorsanız, şu File.Moveyöntemi kullanabilirsiniz :

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

yani uzantıyı jpg olarak değiştirecek mi? orijinal dosyanın?
safi

@Alex Bir dosyayı taşımıyorum, broswer'dan c: \ .. \ .. \ a.jpg gibi dosya yolunu alıyorum ve fiziksel yoldaki dosya biçimi a.Jpeg, bu yüzden onu silmeye çalıştığımda bana dosyayı belirtilen yolda bulamama hatası veriyor. bu yüzden dosya uzantısının eşleşmemesi ile ilgisi olduğunu düşünüyorum. bu yüzden jpg'yi Jpeg'e dönüştürmeye ve dosyayı silmeye çalışıyorum.
safi

3
@safi: Dosya uzantısını örneğin büyük harfe değiştirmenin diskteki bir dosyayı bulacağından şüpheliyim. Dosyanın c:\..\..\a.jpg(örneğinizde) gerçekten var olduğundan emin misiniz ? Cevabınız evet ise, bu dosyayı silmek için yeterli izniniz olmayabilir. Ve son olarak, sadece dosya uzantısını değiştirmek istiyorsanız var newFilePath = Path.ChangeExtension(myffile, ".Jpg");; newFilePathdeğişti uzantılı yeni bir dosya adı içerecektir fiziksel, dosya adı (diskteki) değişmeyecektir.
Alex

1
@safi: bakın, bu var newPath = Path.ChangeExtension("c:/my documents/my images/cars/a where a is a.jpg", string.Empty), uzantıyı birinci yöntem parametresi olarak tanımlanan yoldan kaldıracaktır; newPathdize değişkeni içerecek c:/my documents/my images/cars/a where a is a.bu ameliyattan sonra değerini.
Alex

1
Kod oluşturduğumuz pek çok şey var ama .NET fx'te zaten var. File.Move& Path.ChangeExtension. Güzel ! :-)
Efsaneler

17

Yeniden adlandırmak için dosyanın bir hareketini yapmalısınız. Örnek kodunuzda, dosyayı değil, yalnızca dizeyi değiştiriyorsunuz:

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

sadece myfile'ı değiştiriyorsunuz (bu bir dizedir). Gerçek dosyayı taşımak için yapmalısınız

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

FileInfo.MoveTo bakın


Bir dosyayı taşımıyorum, broswer'dan c: \ .. \ .. \ a.jpg gibi dosya yolunu alıyorum ve fiziksel yoldaki dosya biçimi a.Jpeg, bu yüzden onu silmeye çalıştığımda bana veriyor hatası dosyayı belirtilen yolda bulamıyor. bu yüzden dosya uzantısının eşleşmemesi ile ilgisi olduğunu düşünüyorum. bu yüzden
jpg'yi Jpeg'e

İlk kod herhangi bir ikame yapmaz. Yapmanız gerekenmyfile=myfile.Replace(extension,".Jpeg");
KansaiRobot


4

Yöntem GetFileNameWithoutExtension, adından da anlaşılacağı gibi dosya üzerindeki uzantıyı döndürmez. Sizin durumunuzda, yalnızca "a" döndürür. Bu sonuca ".Jpeg" dosyanızı eklemek istiyorsunuz. Ancak, farklı bir düzeyde, görüntü dosyaları farklı meta verilere sahip olduğundan ve bu kadar kolay dönüştürülemediğinden bu garip görünebilir.


0

Dosya formatını png'ye dönüştür

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*/
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.