|
||
| Merhaba arkadaşlar, Normal olarak C veya C++ ile bir program yazıp çalıştırdığımızda girdileri karşımıza çıkan siyah pencereye yazarız ve çıktıları da aynı şekilde karşımızda buluruz. Düşünün ki programa bir sayfa dolusu girdi vereceğiz ve çıktıyı da ayrı bir dosyada saklamak istiyoruz. Command Promp kullanarak bir dosyadan girdileri okuyup başka bir dosyaya çıktı alabiliyormuşuz. Bunun nasıl yapıldığını bilen ve paylaşmak isteyen arkadaşlar varsa sevinirim.
|
||
|
||
| Aslında sorununu biraz daha açarsan sevinirim; zira ben bu soruyu 3 açıdan değerlendirebilirim: 1-) "command prompt kullanarak bir sayfa dolusu girdi vermek"ten kastın DOS komutları kullanmak mı? 2-) DOS komutları değilse eğer, kendi yazdığın programa giriş olarak parametre aktarmaktan mı söz ediyorsun? Yani, örneğin bir dizindeki salt okunur dosyaları listelemek için "dir" komutuna "/ar" parametresi eklenir: dir /ar şeklinde. Bu tarz birşey mi? 3-) Eğer öyle de değilse, C/C++ da dosyalama işlemlerini mi kast ediyorsun? Girdilerin bir dosyada tutuluyor ve sen bu girdileri yazdığın programda çağırıp çıkışlarını da bir başka dosyada mı tutmak istiyorsun? |
||
|
||
| Üçüncü sorunun cevabını arıyorum:) | ||
|
||
| Dosyalama işlemlerini bildiğim kadarıyla anlatmaya çalışayım o zaman: 1-) Öncelikle bir dosya işaretçisi gerekiyor: FILE* pDosya = NULL; 2-) Sonraki adım, dosyayla ne yapacağını belirlemek: * Yazmak için: Belirleyici string "w" dir; bu durumda dosya sadece yazmak için açılır, eğer dosya, belirtilen yolda yoksa oluştulur, varsa da mevcut içerik tamamen silinir. * Okumak için: Belirleyici string "r" dir; dosya yalnızca okuma durumunda açılır, eğer dosya yoksa oluşturulmaz, dolayısıyla açma işlemi başarısız olur. * Hem okumak hem yazmak için: Belirleyici string "r+" ya da "w+" dır. Her iki durumda da dosya hem okuma hem yazma için açılır; fakat ilk durumda dosya yoksa hata döndürülür, ikinci durumda ise dosya yoksa oluşturulur, varsa da içeriği komple silinir. * Mevcut içeriğe sadece eklenti yapmak için: Belirleyici string "a" dır; dosya yalnızca eklenti yapmak için açılır, mevcut içeriğe eklenti yapılır, dosya yoksa oluşturulur. Örneğin; const char BelirleyiciStr[2] = "w"; 3-) Dosyayla ne yapılacağı belirlendikten sonra işaretçi de kullanılarak dosya açılır: pDosya = fopen ("C:\\hadiordan.txt", BelirleyiciStr); //Burada BelirleyiciStr, az önce belirtilendir; "w", "r" falan hangisi olursa duruma göre... Dosya oluşturulduktan sonra iki şey yapılabilir zaten: * Yazma: Dosyanın modu herhangi bir türden yazma ise ("w", "w+", "r+", "a"), aşağıdaki fonksiyon kullanılarak yazma gerçekleştirilebilir: fscanf (DosyaIsaretcisi, OkunacakVeriTanimlayici, CikisVerisi); Bunun her çağrısında dosyadan bir satır okunur. Eğer dosyanın bir satırında birden fazla veri varsa, VeriTanımlayiciya uygun olan ilk değer okunur. Örneğin, dosyanın ilk satırında bir "int" değer var ve bunu okuyup bir değişkene almak istiyoruz: int x; fscanf (pDosya, "%d", &x); OkunacakVeriTanimlayici için "%d" kullandık, bu okunacak şeyin bir "int" olarak alınacağını söyler. Değişik tipler mevcut: double ve int için "%d", char için "%c", float için "%f", string için "%s" (bu durumda hedef değişken char* ya da char[] olarak tanımlanmalı), long int için "%Ld", long float için "%Lf". * Okuma: Benzer şekilde, eğer dosya herhangi bir okuma modunda açılmışsa ("r", "r+", "w+"), aşağıdaki fonksiyon kullanılarak yazma gerçekleştirilebilir: fprintf (Dosyaİsaretcisi, OkunacakVeriTanimlayici, Veri); Bunun her çağrısında dosyaya bir satır yazılmış olur, dolayısıyla peş peşe yapılan çağrılarda her yazılacak veri alt alta dizilmiş olur. Örnek: Dosyayı yeni oluşturduk ve elimizde de bir int dizisi var, dosyanın ilk satırına dizi eleman sayısını, sonraki satırlara da sırasıyla dizi elemanlarını yazmak istiyoruz: //dizimiz x olsun. //... FILE *pDosya = fopen ("dallama.txt", "w"); int elemansay = sizeof(x) / sizeof (x[0]); fprintf (pDosya, "%d", elemansay); for (int i = 0; i < elemansay; i++) printf (pDosya, "%d", x; Dosyayla yapılan işin bitmesi durumunda dosya kapatılmalıdır. Bunun için de aşağıdaki kod kullanılabilir: fclose (pDosya); Sanırım bu kadar yeterli. |
||