

Acil C De Bi Fonksiyon Gerekli(Yapabilen Yada Bulabilen Cıkarsa Cok Makbule Gecek)
-
adı klavyeden girilen bir klasör içinde dosya aratma(mesala jpg uzantılı olanları bulmamızı saglasın) ve de bu dosyaların adını değiştirmek???
-
anlamadım dostum ne demek istiyon.. şifresiz söle :)
-
:)
olay şuki, mesala program files ta resimler diye kayıtlı bi klasör var, bu klasörün içinde bir sürü dosya var.
ben bunlardan jpg uzantılı olanları bulcam ve adlarını değiştircem...
mesala
klasörün içinde ertt.jpg - dfsdf.txt - fdd.jpg - ... diye bi sürü dosya var. bunların arasından jpg uzantlı olanları bulcam ve resim001.jpg - resim002.jpg gibi yapmam lazım.
yanlis anlama olmasın ben hammallıktaan kacmıyorum, strcpy flan flan yada klasörü acma okutma(w,r,a), farklı bir kopyasını yaratmayı flan biliyorum sadece klasördeki dosyaları taratma ve bunların adını nasıl değiştirceğim bu sorun??? zaten bu kısım ödevin cok küçük bi kısmı o kadar...
yardımcı olabilirseniz cok sevinirim
-
arama seçeneklerindeki dosya türünü değiştirdiğinde olur sanırsam.
not: yanlış anlamadıysam
-
bu dediklerim c de yazdıgım program yapıcak :)
C:\Wsc301.jpgOkuldaki.jpgRes1.jpgArkadaslar.jpgBeraber.jpgAli1.jpgAli2.jpgProgram çalıştıktan sonra klasör içindeki dosyalarınisimleri aşağıdaki gibi olacaktır.C:\end000.jpgend001.jpgend002.jpgend003.jpgend004.jpgend005.jpgend006.jpg
dosya acmayı, yazırmayı sunu bunu biliyorum ama soru su;
klasördeki jpg uzantılı dosyaları nasıl buldurcam ve bu dosyaların adını nasıl değiştircem?? sadece bi tanesini nasıl yapcagımı söleyin siz, ben döngü kurdurur hepsini yaptırırım...
-
FeNCeR bunu yazdı:
-----------------------------adı klavyeden girilen bir klasör içinde dosya aratma(mesala jpg uzantılı olanları bulmamızı saglasın) ve de bu dosyaların adını değiştirmek???
-----------------------------bak simdi kardes , tam olarak dosya handle etmeyi bilmiyorum belki c ile asembly kullanarak yapilir viruslerin mantigi ile fakat suan farkli bilgim yok.
aklima gelen basit yontemi soyleyim sana ac bir cmd msdos shell.
"cd %systemroot%" yazinca C:\WINDOWS a dusmen lazim simdi senin yazindan sonra ben burda denedim.
daha sonra ikinci olarak "dir *.bmp" komutunu yap yani uzantisi .bmp olan ismi ne olursa olsun ekrana bastir demek ben windows klasorunde denedigim icin bmp ler var sadece windowsta sen jpg yapabilirsin. simdi ekranina istedigin uzantida dosyalar geldi diymi ,degistirmek istediklerin yani.
bunlari C ayri olarak handle etmeyi bilmiyorum malesef python da kolay bir yolu vardi fakat neyse C ye donelim... yine bir komut vericeksin dos shell e
"dir *bmp > istedigindosya.txt" bu komut ise diger komuttaki gibi ayni fakat ciktiyi istedigin dosyaya yonlendiriyosun. >> koyarsan var olan bir dosya ise sonuna ekler gelenleri , > yaparsan oyle bir dosya var ise bile sifirlar kendisini yazar. buraya kadar hersey tamam diymi :) simdi sira geliyor senin C bilgine ve agoritmalarina..elimizde ne var suan mesela ? istedigin uzantiya sahip olan programlarin detayli bir listesi :) napicaksin sonra rastgele erisimli dosya stream lerle ulasip dosya isimlerini alcaksin yada dosyanin icini incele bosluklardan sonra geliyor galiba isimler tam bilmiyorumda strtok strstr biselerde handle edip bulmaya calis sonra gerisi kolay :) yine buldugun isimlere komut vericeksin "rename almisoldugunisim.bmp yeniisim.bmp" boylece
shell e bu komutu verip isimlerini degistiriceksin isteigin uzantili dosyalarin.
C de shell e komut yollamak icin stdlib.h da bulunuyodu galiba system(" shell komutun "); boyle vericeksin
ornek
system("cd C:\istedigin_klasor");
system("dir *jpg > kayitlar.txt");FILE *ptr = open("kayitlar.txt","r");
gibi yapip dosya isimlerini tek tek alip bir char poiğnter arrayle tutabilirsin link listle tutabilirsin neyse sonra
system("rename dosyadan_okudugun_dosya.jpg yeni_dosya_ismi.jpg");
yaparak handle edebilirsin istedigin seyleri , neyse umarim yardimci olmusumdur kardesim :(
-
Kardesim simdi bidaha baktim arastirdim benim ilgimi ceken ve unuttugum bir konuydu simdi sana daha net aciklayabilirim.
MsDoS shell icin => "dir /B *.jpg > sonuc.txt" yapicaksin sadece dosya isimleri sonuc.txt adli dosyaya yerlesicek.
Linux te calistigim icin umarim sende oylesindir => "ls *.jpg > sonuc.txt" sonuc adli yere dosya isimleri gelicek linuxta uzanti koymasanda olur sonuc a
simdi yapman gereken FILE *ptr = fopen("sonuc","r"); yada sonuc.txt herneyse dosyadan her satiri okuyup dosya ismini alicaksin ok
Eklicegin headerlar => stdio.h stdlib.h unistd.h ok ? simdi kodlama kisminda
char dosya_yolu[buraya_isletim_sisteminin_alabilecegi_en_fazla_uzunluktaki_path_sayisi]; boylece elinde dosya nin uzantisini tutucak bir char in oldu ok?
char dosya_ismi[256];
char suanki_calistigimiz_dizin[buyuk_bir_sey_yaz]; buraya current_directory yani o anda bulundugun klasoru uzantiyi alirsin onuda yine
MsDos shell icin => "chdir > dizin.txt" yaparsin dizin.txt dosyasinida okuyup gelenleri => suanki_yol a koy ok ?
Linux icin => "pwd > dizin.txt"
sonuc un icinden okuyup aldiklarini ise dosya_ismi[] ne yerlestirceksin
yani ornek verirsem
sonuc.txt in icinde => "spark.jpg" var
dizin.txt in icinde => "C:\Documents and Settings\spark" var.. bunlari birlestirceksin strcat ile birde aralarina \ koyarak linuxtaise /
strcat(dosya_yolu,sunki_calistigimiz_dizin);
strcat(dosya_yolu,'\');
strcat(dosya_yolu,dosya_ismi);
bundan sonra elimizde => "C:\Document and Settings\spark\spark.jpg" oldu diymi guzel kardesim :) geriside fonksiyonlara kaldi
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
extern int remove();
extern int rename();
extern kelimesi baska dosyalardan aktar demek birseyi tahmin ettigin gibi unistd nin icinde yada stdlib in icinde bu fonksiyonlar kendi dosyamiza extern yapiyoruz.
simdi geldi bu 2 fonksiyonunu kullanilmasina.
int remove(const char *path); remove(dosya_yolu); yaptiginda uzantidaki dosya silincek
int rename(const char *old, const char *new); rename(dosya_yolu,senin_secegin_ismin_tamamiyla_yolu); yaptiginda degistirceksin dosyanin ismini :)
int unlink(cons char *path) bu ise icine koydugun yoldaki dosyayi ve tamemen yolu siliyor cok tehlikelidir bu unlink fonksiyonu dikkatini cekerim :)
biliyosun masa ustunde gordugun her obje aslinda hard diskte bir yere link eden bir dosya gibi linkler var dataya unlink ise bunlari direk kaldiran tehlikeli birsey :)
neyse herseyi acikladim umarim halledersin , linux kullanicisi isen gercekten cok harika inanilmaz seyler fonksiyonlar bulabilirsin inanilmaz deryalara girebilirsin :)
neyse kolay gelsin.
-
cok teşekkür ederim kardeş acıkcası ummuyodum böle güzel bi cevap bulabilceğimi,
kendi laptop um yok babamınkinde de windows var ama hiç öenmli değil sen bu kdar yazmıssın gerisini bana kalmıs ve hakkını vercem :) (hatta istersen ödevimi bitirince kodunu yollarım sana :p)
tekrar teşekkür ederim iyi akşamlar...
-
FeNCeR bunu yazdı:
-----------------------------cok teşekkür ederim kardeş acıkcası ummuyodum böle güzel bi cevap bulabilceğimi,
kendi laptop um yok babamınkinde de windows var ama hiç öenmli değil sen bu kdar yazmıssın gerisini bana kalmıs ve hakkını vercem :) (hatta istersen ödevimi bitirince kodunu yollarım sana :p)
tekrar teşekkür ederim iyi akşamlar...
-----------------------------eyvallah kardesim gercekten onemli degil , seve seve arastirdim buldum yaptim vallahi cunku gercekten guzel ve hos konular.
kodlarida isterim ha :P implemantation i gormus olurum :) mr.spark@gmail.com im mailim hemde msn adresim istersen eklersin konusuruz programlama hakkinda tartisiriz yardimlasiriz :) neyse kolay gelsin...