En iyi yanıtlayıcılar
İşlem başka bir işlem tarafından kullanıldığından...

Soru
-
Beyler bir bakar mısınız sorunun kaynağı nedir?
KODLAR:
void belgeleri_doldur() { /*int yillar = 2000; int aylar = 1; int gunlar = 1; string[] mevsimler = { "ilk", "yaz", "son", "kis" }; int mev_say = 1;*/ int say = 0; while (say < listBox1.Items.Count) { int i = 2; string veri = Convert.ToString(listBox1.Items[say]); string[] veriler = veri.Split('\t'); StreamWriter dosya; dosya = File.AppendText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Yillar\\" + veriler[1] + ".txt"); while (i < 24) { dosya.Write(veriler[i*2+1] + "\t"); i++; } dosya.WriteLine("\n"); dosya.Flush(); dosya.Close(); dosya.Dispose(); say++; } }
Yanıtlar
-
Hata Türkçe, kodunu oku neyi kapatmayı atlıyorsun kontrol et. Belki de dosyayı arkada Excel vb. başka bir programla açıp bakıyorsundur.
Flush,Close,Dispose üçlüsünü hangi kaynak böyle gösteriyor ki? Close kendi içinde Dispose'u Dispose da Flush u çağırır. Sadece Dispose kullanman yeterli. Onu da hemen her zaman using bloğu ile kullanmalısın. Böylece arka tarafta try/finally bloğu açılır. Bu sayede blok içinde hata olsa bile o kaynak yine de dispose edilir.
DRY felsefesini, C# daki hazır File sınıfını ve LINQ konularını araştır. Kodun bir kaç satırda halledilebilecekken yazmışsında yazmışsın.
- Düzenleyen Cihan YakarMVP 16 Haziran 2016 Perşembe 05:59
- Yanıt Olarak İşaretleyen özcan özaltın 16 Haziran 2016 Perşembe 15:28
-
Abi sonunda buldum yukarda 2 tane sw file creater kullanıyorum ama 1 kere kapatıyorum. yapmam gereken her defasında ayrı ayrı oluşturup ayrı ayrı kapatmak.
bilmiyorum anlatabildim mi ama kodlar şöyle olacak:
int yillar = 2000; int aylar = 1; int gunler = 1; string[] mevsimler = { "ilk", "yaz", "son", "kis" }; int mev_say = 1; while (yillar <= 2006) //yillarin metin belgelerini olusturuyoruz { StreamWriter sw; sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Yillar\\" + yillar + ".txt"); sw.Flush(); sw.Close(); sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Yillar\\" + yillar + ".txt"); sw.Flush(); sw.Close(); yillar++; } yillar = 2000; while (yillar <= 2006) //Mevsimlerin metin belgelerini olusturuyoruz { mev_say = 0; while (mev_say <= 3) { StreamWriter sw; sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Mevsimler\\" + yillar + "_" + mevsimler[mev_say] + ".txt"); sw.Flush(); sw.Close(); sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Mevsimler\\" + yillar + "_" + mevsimler[mev_say] + ".txt"); sw.Flush(); sw.Close(); mev_say++; } yillar++; } yillar = 2000; while (yillar <= 2006) //ayların metin belgelerini olusturuyoruz { aylar = 1; while (aylar <= 12) { StreamWriter sw; sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Aylar\\" + yillar + "_" + aylar + ".txt"); sw.Flush(); sw.Close(); sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Aylar\\" + yillar + "_" + aylar + ".txt"); sw.Flush(); sw.Close(); aylar++; } yillar++; } yillar = 2000; while (yillar <= 2006) //ayların metin belgelerini olusturuyoruz { aylar = 1; while (aylar <= 12) { gunler = 1; DateTime son_gun = new DateTime(yillar, aylar, 1).AddMonths(1).AddDays(-1); while (gunler <= son_gun.Day) { StreamWriter sw; sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Gunler\\" + yillar + "_" + aylar + "_" + gunler + ".txt"); sw.Flush(); sw.Close(); sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Gunler\\" + yillar + "_" + aylar + "_" + gunler + ".txt"); sw.Flush(); sw.Close(); gunler++; } aylar++; } yillar++; }
- Yanıt Olarak İşaretleyen özcan özaltın 16 Haziran 2016 Perşembe 15:28
Tüm Yanıtlar
-
BU DA KODLARIN TAMAMI:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace RUZGAR001 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.Show(); Application.DoEvents(); string dosyam = ""; dosyam = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\ruzgarveri.txt"; StreamReader verileri_al; verileri_al = File.OpenText(dosyam); string verilerim; while ((verilerim = verileri_al.ReadLine()) != null) { listBox1.Items.Add(verilerim.ToString()); } verileri_al.Close(); verileri_al.Dispose(); } private void button1_Click(object sender, EventArgs e) { klasorleri_kontrol_et(); metin_belgeri_olustur(); belgeleri_doldur(); } void klasorleri_kontrol_et() { try { //bilgiler klasörünün içerisine Directory.CreateDirectory(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler"); //Ana klasör Directory.CreateDirectory(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz"); //hiz klasörü Directory.CreateDirectory(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon"); //yön klasörü //hiz klasörünün içerisine Directory.CreateDirectory(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Yillar"); Directory.CreateDirectory(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Aylar"); Directory.CreateDirectory(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Mevsimler"); Directory.CreateDirectory(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Gunler"); //Yön klasörünün içerisine Directory.CreateDirectory(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Yillar"); Directory.CreateDirectory(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Aylar"); Directory.CreateDirectory(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Mevsimler"); Directory.CreateDirectory(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Gunler"); } catch (Exception) { MessageBox.Show("Veriler Düzenlenlenirken Hata Oldu.\nMasaüstü'ne Klasörler Oluşturulamıyor.", "Bilgi"); } } void metin_belgeri_olustur() { try { int yillar = 2000; int aylar = 1; int gunler = 1; string[] mevsimler = { "ilk", "yaz", "son", "kis" }; int mev_say = 1; while (yillar <= 2006) //yillarin metin belgelerini olusturuyoruz { StreamWriter sw; sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Yillar\\" + yillar + ".txt"); sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Yillar\\" + yillar + ".txt"); yillar++; sw.Flush(); sw.Close(); sw.Dispose(); } yillar = 2000; while (yillar <= 2006) //Mevsimlerin metin belgelerini olusturuyoruz { mev_say = 0; while (mev_say <= 3) { StreamWriter sw; sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Mevsimler\\" + yillar + "_" + mevsimler[mev_say] + ".txt"); sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Mevsimler\\" + yillar + "_" + mevsimler[mev_say] + ".txt"); mev_say++; sw.Flush(); sw.Close(); sw.Dispose(); } yillar++; } yillar = 2000; while (yillar <= 2006) //ayların metin belgelerini olusturuyoruz { aylar = 1; while (aylar <= 12) { StreamWriter sw; sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Aylar\\" + yillar + "_" + aylar + ".txt"); sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Aylar\\" + yillar + "_" + aylar + ".txt"); aylar++; sw.Flush(); sw.Close(); sw.Dispose(); } yillar++; } yillar = 2000; while (yillar <= 2006) //ayların metin belgelerini olusturuyoruz { aylar = 1; while (aylar <= 12) { gunler = 1; DateTime son_gun = new DateTime(yillar, aylar, 1).AddMonths(1).AddDays(-1); while (gunler <= son_gun.Day) { StreamWriter sw; sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Gunler\\" + yillar + "_" + aylar + "_" + gunler + ".txt"); sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Gunler\\" + yillar + "_" + aylar + "_" + gunler + ".txt"); gunler++; sw.Flush(); sw.Close(); sw.Dispose(); } aylar++; } yillar++; } } catch (Exception) { MessageBox.Show("Veriler Düzenlenlenirken Hata Oldu.\nMetin Belgeleri Oluşturulamıyor.", "Bilgi"); } } void belgeleri_doldur() { /*int yillar = 2000; int aylar = 1; int gunlar = 1; string[] mevsimler = { "ilk", "yaz", "son", "kis" }; int mev_say = 1;*/ //hız bilgileri yazılıyor int say = 0; while (say < listBox1.Items.Count) { int i = 2; string veri = Convert.ToString(listBox1.Items[say]); string[] veriler = veri.Split('\t'); StreamWriter dosya0 = File.AppendText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Yillar\\" + veriler[1] + ".txt"); StreamWriter dosya1 = File.AppendText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Aylar\\" + veriler[1] + "_" + veriler[2] + ".txt"); StreamWriter dosya2 = File.AppendText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Gunler\\" + veriler[1] + "_" + veriler[2] + "_" + veriler[3] + ".txt"); while (i < 24) { dosya0.Write(veriler[i * 2 + 1] + "\t"); dosya1.Write(veriler[i * 2 + 1] + "\t"); dosya2.Write(veriler[i * 2 + 1] + "\t"); i++; } dosya0.WriteLine("\n"); dosya0.Flush(); dosya0.Close(); dosya0.Dispose(); dosya1.WriteLine("\n"); dosya1.Flush(); dosya1.Close(); dosya1.Dispose(); dosya2.WriteLine("\n"); dosya2.Flush(); dosya2.Close(); dosya2.Dispose(); say++; } //yön bilgileri yazılıyor say = 0; while (say < listBox1.Items.Count) { int i = 2; string veri = Convert.ToString(listBox1.Items[say]); string[] veriler = veri.Split('\t'); StreamWriter dosya0 = File.AppendText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Yillar\\" + veriler[1] + ".txt"); StreamWriter dosya1 = File.AppendText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Aylar\\" + veriler[1] + "_" + veriler[2] + ".txt"); StreamWriter dosya2 = File.AppendText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Gunler\\" + veriler[1] + "_" + veriler[2] + "_" + veriler[3] + ".txt"); while (i < 24) { dosya0.Write(veriler[i * 2] + "\t"); dosya1.Write(veriler[i * 2] + "\t"); dosya2.Write(veriler[i * 2] + "\t"); i++; } dosya0.WriteLine("\n"); dosya0.Flush(); dosya0.Close(); dosya0.Dispose(); dosya1.WriteLine("\n"); dosya1.Flush(); dosya1.Close(); dosya1.Dispose(); dosya2.WriteLine("\n"); dosya2.Flush(); dosya2.Close(); dosya2.Dispose(); say++; } } } }
NE DÜŞÜNÜYORSUNUZ?
-
Hata Türkçe, kodunu oku neyi kapatmayı atlıyorsun kontrol et. Belki de dosyayı arkada Excel vb. başka bir programla açıp bakıyorsundur.
Flush,Close,Dispose üçlüsünü hangi kaynak böyle gösteriyor ki? Close kendi içinde Dispose'u Dispose da Flush u çağırır. Sadece Dispose kullanman yeterli. Onu da hemen her zaman using bloğu ile kullanmalısın. Böylece arka tarafta try/finally bloğu açılır. Bu sayede blok içinde hata olsa bile o kaynak yine de dispose edilir.
DRY felsefesini, C# daki hazır File sınıfını ve LINQ konularını araştır. Kodun bir kaç satırda halledilebilecekken yazmışsında yazmışsın.
- Düzenleyen Cihan YakarMVP 16 Haziran 2016 Perşembe 05:59
- Yanıt Olarak İşaretleyen özcan özaltın 16 Haziran 2016 Perşembe 15:28
-
Hata Türkçe, kodunu oku neyi kapatmayı atlıyorsun kontrol et. Belki de dosyayı arkada Excel vb. başka bir programla açıp bakıyorsundur.
Flush,Close,Dispose üçlüsünü hangi kaynak böyle gösteriyor ki? Close kendi içinde Dispose'u Dispose da Flush u çağırır. Sadece Dispose kullanman yeterli. Onu da hemen her zaman using bloğu ile kullanmalısın. Böylece arka tarafta try/finally bloğu açılır. Bu sayede blok içinde hata olsa bile o kaynak yine de dispose edilir.
DRY felsefesini, C# daki hazır File sınıfını ve LINQ konularını araştır. Kodun bir kaç satırda halledilebilecekken yazmışsında yazmışsın.
Abi dediklerini anladım açık ve netsin.
Kodlara bakıyorum hani kapatmayı atladığım bir şey var mı diye ama her defasında açtıklarımı kapatmışım. Görmediğim atladığım bir yer var mı?. Bir de exel de word de açık değil zaten program çalışınca kendi oluşturuyor açıp yazdıyor.
Flush,Close,Dispose de sedece flush ile close kullanıyordum ama hatayı düzeltir mi diye en sonlara disposeyi sonradan ekledim düzelmedi onu değiştiricem.
-
Abi sonunda buldum yukarda 2 tane sw file creater kullanıyorum ama 1 kere kapatıyorum. yapmam gereken her defasında ayrı ayrı oluşturup ayrı ayrı kapatmak.
bilmiyorum anlatabildim mi ama kodlar şöyle olacak:
int yillar = 2000; int aylar = 1; int gunler = 1; string[] mevsimler = { "ilk", "yaz", "son", "kis" }; int mev_say = 1; while (yillar <= 2006) //yillarin metin belgelerini olusturuyoruz { StreamWriter sw; sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Yillar\\" + yillar + ".txt"); sw.Flush(); sw.Close(); sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Yillar\\" + yillar + ".txt"); sw.Flush(); sw.Close(); yillar++; } yillar = 2000; while (yillar <= 2006) //Mevsimlerin metin belgelerini olusturuyoruz { mev_say = 0; while (mev_say <= 3) { StreamWriter sw; sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Mevsimler\\" + yillar + "_" + mevsimler[mev_say] + ".txt"); sw.Flush(); sw.Close(); sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Mevsimler\\" + yillar + "_" + mevsimler[mev_say] + ".txt"); sw.Flush(); sw.Close(); mev_say++; } yillar++; } yillar = 2000; while (yillar <= 2006) //ayların metin belgelerini olusturuyoruz { aylar = 1; while (aylar <= 12) { StreamWriter sw; sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Aylar\\" + yillar + "_" + aylar + ".txt"); sw.Flush(); sw.Close(); sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Aylar\\" + yillar + "_" + aylar + ".txt"); sw.Flush(); sw.Close(); aylar++; } yillar++; } yillar = 2000; while (yillar <= 2006) //ayların metin belgelerini olusturuyoruz { aylar = 1; while (aylar <= 12) { gunler = 1; DateTime son_gun = new DateTime(yillar, aylar, 1).AddMonths(1).AddDays(-1); while (gunler <= son_gun.Day) { StreamWriter sw; sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Hiz\\Gunler\\" + yillar + "_" + aylar + "_" + gunler + ".txt"); sw.Flush(); sw.Close(); sw = File.CreateText(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Bilgiler\\Yon\\Gunler\\" + yillar + "_" + aylar + "_" + gunler + ".txt"); sw.Flush(); sw.Close(); gunler++; } aylar++; } yillar++; }
- Yanıt Olarak İşaretleyen özcan özaltın 16 Haziran 2016 Perşembe 15:28
-
Her zaman using kullanırsan açtığını kapatmayı unutmazsın. Using kullanmamanı gerektirecek durum o kadar az ki.
Son gönderdiğin kodda hala , flush , close kullanıyorsun ama using yok:) Flush buffer ı streamin kaynağına akıtmaya yarar. Büyük dosyalar ile çalışmıyorsan işin bittiğinde yapman yeterli olur ve hatta sen uğraşma diye AutoFlush property'si bulunur.
Kodunun bir kısmını düzenledim, ama tamamı süreki gereksiz tekrarlar ve gereksiz method çağrıları içeriyor. Feyz al artık (c#6 da gelen string interpolation'ı da ekledim + ile string birleştirmeyin. c# 6 kullanmıyorsan bile string.Format, string.Concat, string.Join gibi daha efendi string birleştirme yöntemleri var) :
var desktopPath = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // süreli sormanın anlamı yok while (yillar <= 2006) //Mevsimlerin metin belgelerini olusturuyoruz { mev_say = 0; while (mev_say <= 3) { using ( File.CreateText( $"{desktopPath}\\Bilgiler\\Hiz\\Mevsimler\\{yillar}_{mevsimler[mev_say]}.txt")) {} using (File.CreateText( $"{desktopPath}\\Bilgiler\\Yon\\Mevsimler\\{yillar}_{mevsimler[mev_say]}.txt")) {} mev_say++; } yillar++; }
- Düzenleyen Cihan YakarMVP 17 Haziran 2016 Cuma 10:25
-
Her zaman using kullanırsan açtığını kapatmayı unutmazsın. Using kullanmamanı gerektirecek durum o kadar az ki.
Son gönderdiğin kodda hala , flush , close kullanıyorsun ama using yok:) Flush buffer ı streamin kaynağına akıtmaya yarar. Büyük dosyalar ile çalışmıyorsan işin bittiğinde yapman yeterli olur ve hatta sen uğraşma diye AutoFlush property'si bulunur.
Kodunun bir kısmını düzenledim, ama tamamı süreki gereksiz tekrarlar ve gereksiz method çağrıları içeriyor. Feyz al artık (c#6 da gelen string interpolation'ı da ekledim + ile string birleştirmeyin. c# 6 kullanmıyorsan bile string.Format, string.Concat, string.Join gibi daha efendi string birleştirme yöntemleri var) :
var desktopPath = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // süreli sormanın anlamı yok while (yillar <= 2006) //Mevsimlerin metin belgelerini olusturuyoruz { mev_say = 0; while (mev_say <= 3) { using ( File.CreateText( $"{desktopPath}\\Bilgiler\\Hiz\\Mevsimler\\{yillar}_{mevsimler[mev_say]}.txt")) {} using (File.CreateText( $"{desktopPath}\\Bilgiler\\Yon\\Mevsimler\\{yillar}_{mevsimler[mev_say]}.txt")) {} mev_say++; } yillar++; }