Konuyu görüntüle
IUCODERS FORUM > Programlama > C / C++ > C de ilk soru!!
Yazar
barbi


avatar
istanbul
Kayıt: 24.01.2006
26.01.2006-12:45 #1001
Şu güzel tatil günündebiggrin C de anlıyamadığım bişeyi soracambiggrin
bir dosyadan bikaç şey silmek için yeni bir dosya açıp, dosyadan silmeyeceklerimi o dosyaya kopyalamak, sonradan da eski dosyayı silip yeni dosyanın ismini değiştirmeye çalışıyorum. Ama rename() ve remove() fonksiyonlarını kullandığımda ikiside hiçbir işe yaramadı. yani yeni dosyaya istediklerim kopyalanıyor ama ne ismi değişiyor ne de eski dosya siliniyoralien 2thinking. Bu iki fonk.un nasıl çalıştığı hakkında bilgisi olan varsa biraz yardımcı olabilirmi?confusedangel
herkese ii tatillerdancing





people pray for strength, and guidance; they should pray for the mercy of a swift death...


Yazar
tarikkranda


avatar

Kayıt: 07.01.2006
26.01.2006-13:04 #1004
Selamlar,
her iki fonksiyonu defalerca kullanmışımdır ve hiç bir problem yaşamadım şu ana kadar. Yani herikiside hem siliyor, hem de yeniden adlandırma yapabiliyor kendi kodlarımdan biliyorum. Acaba dosya adlarını su sekilde mi veriyorsunuz ornegin rename("C:\\a.txt","C:\\b.txt") ya da remove("C:\\b.txt") gibi. Ya da daha once yaptıgınız islemlerde(dosyadan bikac satır silmek , vs..) bildiginiz gibi dosyaya bir stream acıyorsunuz. FILE * di = fopen(...vs) bu stream i kapamayı mı unutmus olabilirsiniz bu islemleri yapmadan once. Ben denemedim ama acık unutlmus bu streamler dosyaların kullanıldıgı anlamına gelir ve biliyorsunuzki kullanımda olan dosyaların ismini degistirme , silme gibi islemler isletim sisteminin guvenlik yuzugunun (ring 0) sorunlulugundadır ve sizi durdurabilir bir interrupt ile. Streamleri kapatıp deneyin. Hatta sunu direkt deneyin programınızın calıstıgını goreceksiniz.
1) C diskine a.txt isminde bir dosya acın
2) Su kodu yazın:
#inlude <stdio.h>
int main(void)
{
remove("C:\\a.txt");
retrun 0;
}
3) Eger bu kod calısmamıssa o zaman bir daha konusalım derim.






Yazar
orhan


avatar
istanbul
admin
Kayıt: 17.11.2005
26.01.2006-13:15 #1012
cpp olsa soyle olurdu yalnız \ bu bolu cizgisinden iki tane olmalı. filtreye takılıyor.
#include <iostream>
#include <cstdio>
using std::cout;
using std::endl;
int main (){ 
	int flag=rename("c:\old.txt", "c:\new.txt");
	if(flag==0){
		cout<<"oldi"<<endl;
	}else{
		cout<<"olmadi"<<endl;
	}
	return 0;
}






N/A
Yazar
barbi


avatar
istanbul
Kayıt: 24.01.2006
26.01.2006-13:23 #1016
anlatılan şekillerde kullandım. dosyalarıda rename ve remove u kullanmadan kapatmıştım. Ama Tarık senin dediğini yazdığımda dosyayı silebildimthinking. ben dosya ismini dizide tutuyordum. O zaman fonksiyon kullanışımdan değilde dizide bir sorun oldu. kod şöyleydi :

remove(path);
rename("temp.txt", path); //temp dosyası proje ile aynı klasör içerisinde








people pray for strength, and guidance; they should pray for the mercy of a swift death...


Yazar
tarikkranda


avatar

Kayıt: 07.01.2006
26.01.2006-13:32 #1023
barbi yazdi
 
anlatılan şekillerde kullandım. dosyalarıda rename ve remove u kullanmadan kapatmıştım. Ama Tarık senin dediğini yazdığımda dosyayı silebildimthinking. ben dosya ismini dizide tutuyordum. O zaman fonksiyon kullanışımdan değilde dizide bir sorun oldu. kod şöyleydi :

remove(path);
rename("temp.txt", path); //temp dosyası proje ile aynı klasör içerisinde




rename islemi bir sorun ile karsılastıgında 0 error kodu nu dondurur, Orhanın yazdıgfı Cpp kodundaki flag de bunu kontrol ediyor, o koda bir bak. Ama bence bir watch yaparak diziden gelen path ismine bak derim ben oncelikle. Hatta kodundaki path i diziden alıosun galba, oraya elle direkt yaz silecegin dosyanın adını benim gonderdigim koddaki gibi. Boylece path in diziden eksik ya da yanlis dondugunu direkt anlamıs olursun.





Yazar
orhan


avatar
istanbul
admin
Kayıt: 17.11.2005
26.01.2006-13:35 #1026
0 okmiş abi. hata olursa -1 donduruyomuş. bana ilginc geldi.





N/A
Yazar
tarikkranda


avatar

Kayıt: 07.01.2006
26.01.2006-13:42 #1029
orhan yazdi
 
0 okmiş abi. hata olursa -1 donduruyomuş. bana ilginc geldi.

evet dogru pardon ters yazmısımbiggrin Zaten dogalı hata olursa -1 dondurmesi. Bu bir standart aslında ben de oyle kullanıyorum kendi fonksiyonlarımda, cunku bir fonksiyonun ya da prosesin dogru calıstıgını anlamak icin tek bir deger dondurmek yeterlidir yani 0, ancak hatalı calıstıgında birden cok hata dan dolayı fonksiyon patlayabilir, bu hataları temsil etmek icin farklı sayılar kullanmanız gerekir. Bundan dolayı genelde 0 dogruyu , geriye donen farklı negatif degerlerde sizin kodunuzun neden patladıgını gosterir. Ben boyle yorumladım bugune kadarbiggrin





Yazar
barbi


avatar
istanbul
Kayıt: 24.01.2006
26.01.2006-13:52 #1033
Büyük ihtimalle bi yerde basit bi hata var ama iki saattir ona bakıyorum bulamıyorum.angry kod da biraz uzadı artık(1000 satır kadarbiggrin) herşey birbiri ile bağlantılıd oh
Fonk.ların geri dönüş değerleri -1. ama dizide de sorun yok. diziyide yazdırdım dosya ismi ile aynı. zaten dosyayı ilk açarken de aynı dizi ismini kullandım. şu şekilde :

f = fopen(path, "r");
tempfile = fopen("temp.txt","w");
/* kopyalam işlemi burayı başarıyla yapıyor*/
fclose(f);
fclose(tempfile);
remove(path);
rename("temp.txt", path);
.....






people pray for strength, and guidance; they should pray for the mercy of a swift death...


Yazar
tarikkranda


avatar

Kayıt: 07.01.2006
26.01.2006-14:45 #1053
barbi yazdi
 
Büyük ihtimalle bi yerde basit bi hata var ama iki saattir ona bakıyorum bulamıyorum.angry kod da biraz uzadı artık(1000 satır kadarbiggrin) herşey birbiri ile bağlantılıd oh
Fonk.ların geri dönüş değerleri -1. ama dizide de sorun yok. diziyide yazdırdım dosya ismi ile aynı. zaten dosyayı ilk açarken de aynı dizi ismini kullandım. şu şekilde :

f = fopen(path, "r");
tempfile = fopen("temp.txt","w");
/* kopyalam işlemi burayı başarıyla yapıyor*/
fclose(f);
fclose(tempfile);
remove(path);
rename("temp.txt", path);
.....


yaw ne diyecegimi bilemiyorum, kodu gormeden tum tahminlerimi yaptım ama istersen kodu gonder bi de en bakayım, islem yapılcak dosyaları da eklersen gonderirken iyi olur, mailim tarikkranda@gmail.com. Umarım yardımcı olabilrim zamanım olursa yeterli





Yazar
barbi


avatar
istanbul
Kayıt: 24.01.2006
26.01.2006-15:15 #1060
Tarık gerçekten sağolasın.praying Az önce sana kodu gönderebilmek için sorun olan kısımları ayrı bir C dosyasına kopyaladım. gereksiz kontrolleri çıkardım anlaşılsın diye kod çalıştıblushingdancing bi yerde dosyanın olup olmadığının yada boş olup olmadığının kontrolünü yapmıştımidea. orada dolu olması şartında fclose() yapmayı unutmuşumsilly açık bir dosyayı aynı dosya modunda tekrar aömaya çalışınca hata vermiyor sanırım. Ama iş kapatmaya gelince sorun olduhypnotized
Yardımlar için sağolun herkese kolay gelelaughingdancing





people pray for strength, and guidance; they should pray for the mercy of a swift death...


Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb