none
Değişken dosya yolu atama RRS feed

  • Soru

  • Selamlar, 

    Bu konularda yeniyim başlık bile doğru mu emin değilim fakat derdimi anlatmaya çalışacağım.

    Projenin içinde "temp" adında klasörde resimler var ve ben bu resimlerin sırayla dosya yolunu almak istediğim için şöyle bi kod yazdım. 

    Listboxta klasör içeriğini aktardım içerikleri döngüye soktum 

    Bu döngüden dosya isimlerini sırayla alıp "sonDeger" isimli değişkene atıyorum

    ama gel gelelim 

    (@"Temp\"+sonDeger+"");

    şu kısımda takılıyorum aldığım hata 'Parametre geçerli değil.' oluyor.

    Burası nasıl yazılmalı hiç bir fikrim yok hatta o kadar araştırdım ki böyle bir yöntem var mı onu bile bilmiyorum.

     listBox1.SelectedIndex = i;
                    string metin = listBox1.SelectedItem.ToString();
                    string sonDeger = metin.Split('\\').Last();
                    
    
                    Bitmap resim = new Bitmap(@"Temp\"+sonDeger+"");

    Yardımlarınız için şimdiden teşekkür ederim.

    6 Kasım 2020 Cuma 23:35

Yanıtlar

    1. Listbox'a dosya isimlerini nasil aliyorsunuz?
    2. Arada listbox kullanmak zorunda misiniz?
    3. Debugger ile hata verdigi yerde sonDeger'in ne olduguna baktiniz mi?
    4. Arada listBox kullanmak zorundaysaniz bile, neden SelectedIndex degistiriyorsunuz?
    5. Kodunuzu biraz farkli yazsak olur mu? Ornegin:
    using (StreamWriter yaz = new StreamWriter("deneme.txt"))
    {
    	foreach (var dosya in Directory.GetFiles(@"temp", "*.png", SearchOption.TopDirectoryOnly))
    	{
    		Bitmap resim = new Bitmap(dosya);
    
    		yaz.Write("\n" + Path.GetFileName(dosya) + "\n");
    		for (int i = 0; i < resim.Height; i++)
    		{
    			for (int j = 0; j < resim.Width; j++)
    			{
    				var renk = resim.GetPixel(j, i);
    				var sonuc = (renk.R + renk.G + renk.B) / 3M;
    				yaz.WriteLine(sonuc);
    			}
    		}
    	}
    	yaz.Close();
    }



    Blog
    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.

    • Yanıt Olarak İşaretleyen Lelusvi 7 Kasım 2020 Cumartesi 16:46
    7 Kasım 2020 Cumartesi 11:10
    Yanıtlayıcı
  • Aynı kodu çalıştırdım. Herhangi bir sorun yok. Temp klasör içeriğinizde bir sorun omlasın? Denemek adına 3 dosya attım klasörü oluşturup.

    • Yanıt Olarak İşaretleyen Lelusvi 9 Kasım 2020 Pazartesi 04:45
    7 Kasım 2020 Cumartesi 21:26
    Moderatör
  • Aşağıdaki şekilde dener misin?

    using (StreamWriter yaz = new StreamWriter("deneme.txt"))
    {
    	string[] uzantilar = { ".jpg", ".jpeg", ".png" };
    
    	string[] dosyalar = Directory.GetFiles(@"temp", "*.*").Where(f => uzantilar.Contains(System.IO.Path.GetExtension(f).ToLower())).ToArray();
    	foreach (var dosya in dosyalar)
    	{
    		Bitmap resim = new Bitmap(dosya);
    
    		yaz.Write("\n" + Path.GetFileName(dosya) + "\n");
    		for (int i = 0; i < resim.Height; i++)
    		{
    			for (int j = 0; j < resim.Width; j++)
    			{
    				var renk = resim.GetPixel(j, i);
    				var sonuc = (renk.R + renk.G + renk.B) / 3M;
    				yaz.WriteLine(sonuc);
    			}
    		}
    	}
    	yaz.Close();
    }

    • Yanıt Olarak İşaretleyen Lelusvi 9 Kasım 2020 Pazartesi 04:45
    7 Kasım 2020 Cumartesi 19:50
    Moderatör
  • "Due to a limitation of the GDI+ decoder, an System.ArgumentException is thrown if you construct a bitmap from a .png image file with a single dimension greater than 65,535 pixels."


    Blog
    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.

    • Yanıt Olarak İşaretleyen Lelusvi 9 Kasım 2020 Pazartesi 04:39
    8 Kasım 2020 Pazar 21:26
    Yanıtlayıcı

Tüm Yanıtlar

  • Path.Combine size dosya/klasör yolu oluşturmada yardımcı olur;

    Bir projeniz desktop mu, web mi?
    İki Temp klasörü nerede? Projenin içindeki klasör exe nin yanına taşınmaz;

    Eğer desktop uygulamasında exenin olduğu yerde bir Temp klasörü varsa;

    System.IO.Path.Combine(Appliction.StartupPath, "Temp", sonDeğer);
    Yoksa;
    şunu yapın;

    var klasör = Path.Combine(Application.StartupPath, "Temp");
    if(!Directory.Exists(klasör))
        Directory.Create(klasör);
    var bitmap = new Bitmap(Path.Combine(klasör, sonDeğer));



    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    7 Kasım 2020 Cumartesi 05:54
    Moderatör
  • @Önay Yalçıner

    Öncelikle teşekkür ederim cevabınız için

    Bu bir masaüstü uygulaması ve exenin olduğu yerde Temp klasörü var 

    Ne yaparsam yapayım yolu elimle alttaki gibi girmediğim sürece kabul ettiremedim.

    Sadece böyle yazarsam kabul ediyor bu da işime gelmiyor çünkü tek dosya seçili ben bütün resimleri almak istiyorum.

    Bitmap resim = new Bitmap(@"Temp\indir.png"); ;

    Kodların o kısmını komple atayım aşağıya burada amacım resimlerin isimlerini ve rgb değerlerinin ortalamasını,txt dosyasına alt alta yazmak.

    Ama resimleri sırayla programa nasıl göstereceğimi bilmediğimden dolayı böyle bir yol düşündüm.

    Tek sıkıntı bitmap'e atadığım dosya yolu

    StreamWriter yaz = new StreamWriter("deneme.txt");
    
            for (int p = 0; p < listBox1.Items.Count; p++)
            {
    
                listBox1.SelectedIndex = p;
                string metin = listBox1.SelectedItem.ToString();
                string sonDeger = metin.Split('\\').Last();
    
                 Bitmap resim = new Bitmap(@"Temp\" + sonDeger + ""); ;
    
                Color renk;
                int i, j, a, b, c;
                float sonuc;
    
                yaz.Write("\n" + sonDeger + "\n");
    
                for (i = 0; i < resim.Height; i++)
    
                {
                    for (j = 0; j < resim.Width; j++)
    
                    {
    
                        renk = resim.GetPixel(j, i);
    
                        a = renk.R;
                        b = renk.G;
                        c = renk.B;
    
                        sonuc = (a + b + c) / 3;
    
    
                        yaz.Write(sonuc + "\n");
    
                        listBox1.SelectedIndex = p;
                    }
    
    
                }
    
    
    
            }
            yaz.Close();
    
    
    
        }


    7 Kasım 2020 Cumartesi 07:53
    1. Listbox'a dosya isimlerini nasil aliyorsunuz?
    2. Arada listbox kullanmak zorunda misiniz?
    3. Debugger ile hata verdigi yerde sonDeger'in ne olduguna baktiniz mi?
    4. Arada listBox kullanmak zorundaysaniz bile, neden SelectedIndex degistiriyorsunuz?
    5. Kodunuzu biraz farkli yazsak olur mu? Ornegin:
    using (StreamWriter yaz = new StreamWriter("deneme.txt"))
    {
    	foreach (var dosya in Directory.GetFiles(@"temp", "*.png", SearchOption.TopDirectoryOnly))
    	{
    		Bitmap resim = new Bitmap(dosya);
    
    		yaz.Write("\n" + Path.GetFileName(dosya) + "\n");
    		for (int i = 0; i < resim.Height; i++)
    		{
    			for (int j = 0; j < resim.Width; j++)
    			{
    				var renk = resim.GetPixel(j, i);
    				var sonuc = (renk.R + renk.G + renk.B) / 3M;
    				yaz.WriteLine(sonuc);
    			}
    		}
    	}
    	yaz.Close();
    }



    Blog
    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.

    • Yanıt Olarak İşaretleyen Lelusvi 7 Kasım 2020 Cumartesi 16:46
    7 Kasım 2020 Cumartesi 11:10
    Yanıtlayıcı
  • @CetinBasoz

    Çok teşekkürler bu cevap çok işimi gördü yardım eden herkesin emeğine sağlık

    peki jpg ve png leri aynı anda almak için ne yapmam gerekir .

    7 Kasım 2020 Cumartesi 16:45
  • @CetinBasoz

    Çok teşekkürler bu cevap çok işimi gördü yardım eden herkesin emeğine sağlık

    peki jpg ve png leri aynı anda almak için ne yapmam gerekir .

    Merhaba;

    Çetin Hocam'ın verdiği kod'ta sadece şu alanı değiştirin : 

    foreach (var dosya in Directory.GetFiles(@"temp", "*.png|*.jpg|*.jpeg", SearchOption.TopDirectoryOnly))

    7 Kasım 2020 Cumartesi 19:15
    Moderatör
  • Merhaba @Barış Sarıtaş

    böyle yapmayı denedim fakat yolda geçersiz karakterler var hatası alıyorum 1 tanesini yazınca hata vermiyor

    7 Kasım 2020 Cumartesi 19:29
  • Aşağıdaki şekilde dener misin?

    using (StreamWriter yaz = new StreamWriter("deneme.txt"))
    {
    	string[] uzantilar = { ".jpg", ".jpeg", ".png" };
    
    	string[] dosyalar = Directory.GetFiles(@"temp", "*.*").Where(f => uzantilar.Contains(System.IO.Path.GetExtension(f).ToLower())).ToArray();
    	foreach (var dosya in dosyalar)
    	{
    		Bitmap resim = new Bitmap(dosya);
    
    		yaz.Write("\n" + Path.GetFileName(dosya) + "\n");
    		for (int i = 0; i < resim.Height; i++)
    		{
    			for (int j = 0; j < resim.Width; j++)
    			{
    				var renk = resim.GetPixel(j, i);
    				var sonuc = (renk.R + renk.G + renk.B) / 3M;
    				yaz.WriteLine(sonuc);
    			}
    		}
    	}
    	yaz.Close();
    }

    • Yanıt Olarak İşaretleyen Lelusvi 9 Kasım 2020 Pazartesi 04:45
    7 Kasım 2020 Cumartesi 19:50
    Moderatör
  • @Barış Sarıtaş

    Bitmap resim = new Bitmap(dosya);

    (Dosya) kısmında

    System.ArgumentException: 'Parametre geçerli değil.' hatası veriyor malesef

    7 Kasım 2020 Cumartesi 21:03
  • Aynı kodu çalıştırdım. Herhangi bir sorun yok. Temp klasör içeriğinizde bir sorun omlasın? Denemek adına 3 dosya attım klasörü oluşturup.

    • Yanıt Olarak İşaretleyen Lelusvi 9 Kasım 2020 Pazartesi 04:45
    7 Kasım 2020 Cumartesi 21:26
    Moderatör
  • Neyi yanlış yaptığımı çözemedim kusura bakmayın

    7 Kasım 2020 Cumartesi 21:51
  • "Due to a limitation of the GDI+ decoder, an System.ArgumentException is thrown if you construct a bitmap from a .png image file with a single dimension greater than 65,535 pixels."


    Blog
    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.

    • Yanıt Olarak İşaretleyen Lelusvi 9 Kasım 2020 Pazartesi 04:39
    8 Kasım 2020 Pazar 21:26
    Yanıtlayıcı
  • Gerçekten test amaçlı aldıgım 65 kb lık 1280x900 bir resim vardı ve sorun sadece o resimmiş teşekkürler herkese.
    9 Kasım 2020 Pazartesi 04:45