Merhaba, tekrar hoş geldiniz.
Bu konuşmada şunları yapmak istiyorum dosyalara erişim hakkında konuşun.
Yani diskteki dosyaların bir adı vardır ve Dosyaların adlandırılmasına ilişkin kurallar işletim
sisteminiz tarafından belirlenir.
Ayarlamanız gerekebilir Programınızın çalıştığı işletim sistemine
bağlı olarak adlar.
Programınız Windows üzerinde çalışıyorsa Linux ile karşılaştırıldığında,
gerçek dizin yapısı da farklıdır.
Yani eğer ileri kesiciler kullanırsanız veya geriye doğru eğik çizgiler varsa, bunu
programınızda ayarlamanız gerekir.
Ancak çoğunlukla isimlerin göreceli olarak aynı adlandırma
kurallarına sahip olması vb.
Ama bir şans var ayarlamanız gerekir.
Bir program bir dosyaya şu yolla başvurur bir dosya işaretçisi veya bir akış işaretçisi.
Bir cihazdan daha fazlası üzerinde çalıştığı için dosyasında, aslında,
bundan daha önce bahsetmiştik, ancak standart io işlevleri herhangi bir cihazda çalışır.
Yani buna dosya işaretçisi denir, ancak aslında bir akış işaretçisi olarak
adlandırılmalıdır.
Bir dosya işaretçisini ilişkilendirirsiniz programınız çalıştırıldığında
programlı olarak bir dosya ile.
Yani sonunda yapacağın şey programınızın içinde bir işaretçi oluşturduğunuzda,
bu işaretçi dosya türünde olacak ve Bu, dosyayı okuduğunuzda ve yazdığınızda dosyayı temsil
edecektir.
Bu dosya işaretçilerini bir aksine dosyalara gerçekten işaret etmenin daha
etkili bir yolu çünkü isim biraz farklı
olabilir.
İşaretçi şunları temsil edecektir aslında neye işaret ettiğini.
Ve işaretçileri tekrar kullanabilirsiniz, farklı durumlarda farklı
dosyalara işaret etmek, ki yine, dosya adı tarafından temsil ediliyordu.
Bir dosya işaretçisi bir yapıya işaret eder bir akışı temsil eden dosya türü.
Aslında gidip bakabilirsin içindeki her şeyi görmek için dosya
yapısına bakın.
Ancak aşağıdaki gibi bilgiler içerir dosyayı okumak, yazmak
veya güncellemek isteyip istemediğiniz gibi bellekte veri depoladığınız
tamponun adresi, bir Bir sonraki işlem için dosyadaki geçerli
konuma işaretçi.
Pozisyonun şu olduğunu belirtmiştik önemlidir çünkü yazma
ve okuma işlemlerinizi burada yaparsınız.
Ve tüm bu bilgileri ayarlayabilirsiniz giriş ve çıkış dosyası işlemlerini
kullanarak yapının içinde.
Giriş çıkış dosya işlemleri, Bir dosyayı açtığınızda, aslında bu dosyanın
okumak veya yazmak istiyorsunuz.
Ve sonra da değiştirebilirsiniz arama ve benzeri diğer yöntemleri
kullanarak mevcut konum hakkında konuşacağız.
Birkaç dosya kullanmak istiyorsanız programınızda eşzamanlı
olarak, ayrı bir her dosya için dosya işaretçisi.
Dosyayı yalnızca yeniden kullanabilirsiniz Eğer farklı zamanlarda okuyor ve yazıyorsanız
işaretçi.
Açık alan sayısının bir sınırı vardır tek bir açık zamanda sahip olabileceğiniz dosyalar.
Sınıra şuradan bakabilirsiniz standart IO, sabit
tanımlı bir f açık maks. yine hangi işletim sisteminde çalıştığınıza
bağlıdır.
Ancak genellikle aşağıdakileri oluşturmak istemezsiniz ve aynı anda bir ton dosya açabilirsiniz.
Dosyaların yazılması ve okunması Sabit diske yazdığınız için pahalı
bir işlemdir.
Yazmak kadar hızlı değil bu yüzden
zaman alır ve programınızın daha az duyarlı olmak için.
10'a sahip olmak istemezsin dosyaları açık
ve aynı anda 10 dosyaya yazıyor.
Bir dosyayı açmak için, bu okumadan ve yazmadan önce yaptığınız
ilk adım olmalıdır.
Yani belirli bir bir süreç boyunca tüm son işaretçi
ile harici dosya adı dosyanın açılması olarak adlandırılır.
Bir dosyayı açma şekliniz ve f açık işlevini çağırdığınızı görün.
Bu dosyayı döndürecektir Daha sonra okuma ve yazma için
kullanabileceğiniz işaretçi.
Ve yine, dosya işaretçisi diskteki belirli bir
harici dosyaya işaret edecek.
F açık alacak dosyanın adı.
Yapmanız gereken şey f açık herhangi bir okuma/yazma yapmadan önce.
Bu genellikle ilk ameliyatınız olur.
Ve bu işlevlerin çoğunda olduğu gibi, hepsi standardio'da tanımlanmıştır. h.
İşte tanımı açık çağrının.
Geri dönüşü göreceksiniz değeri bir dosya işaretçisidir,
büyük harflerle yazılır, dosya yapısıdır.
Yani büyük harfli dosya.
O zaman fark edeceksiniz ki birkaç parametre, bir isim ve
bir mod alır ve bu konuda endişelenmeyin Bu da C11'in başka bir şeyi.
Bu gerçekten sadece karakteri alır bir isme ve bir moda işaret eder.
Fonksiyonun ilk argümanı dosyanın adı olan bir dizeye
bir işaretçidir, böylece çift tırnak içinde olacaktır.
Adı açıkça belirtebilir veya karakter dizesinin adresini içeren bir karakter
işaretçisi kullanır.
Yani tüm bunların söylediği bir karakter dizesi oluşturun ve bunu gerçek metne
atayın ve ardından dizesini fonksiyona aktarabilir ya da
çift tırnak işaretlerini fonksiyon çağrısının içine yerleştirin.
Dosya adını elde edebilirsiniz komut satırı aracılığıyla da kullanıcıdan
girdi olarak veya programınızın bir sabiti olarak.
Her zaman aynı dosya ise okuduğunuz yazının adı önemli
değildir, siz sadece bir sabit olarak adlandırılabilir.
Eğer programınız daha esnek ise ne okumak veya yazmak istediğinizi söylemek için kullanıcıdan
girdi alabilir.
f open için ikinci argüman işlevi, dosya modunu temsil eden bir
karakter dizesidir.
Bu, ne yapmak istediğinizi belirtir dosyayı okumak isteyip istemediğinizi,
dosyaya yazmak isteyip istemediğinizi eklemek isteyip istemediğinizi belirler.
Bir dosya modu belirtimi çift tırnaklar arasında
bir karakter dizesi ve Sonunda çok kullanacağımız bazılarını
size anlatacağım.
f çağrısının açık olduğunu varsayarsak başarılı olursa, bu dosya işaretçisini
büyük harflerle döndürür.
Ve sonra bu dosyayı kullanabilirsiniz standart IO başlığındaki diğer giriş/çıkış
işlevlerini çağırmak için işaretçi ve Okuma ve yazmaya geçerken bunların
üzerinden geçeceğiz. 'yi değiştirmek için bu işaretçiyi kullanarak
konumu da alabilirsiniz. Dosyada bulunduğunuz yerin konumu.
Dosya açılamıyorsa bazı nedenlerden dolayı, f open null
döndürecektir.
Yani bu şu anlama geliyor herhangi bir okuma veya yazma işlemi yapmaya
başladığınızda, işaretçinin null'a eşitse, başka bir if kontrolü.
İşte dosya bahsettiğim modlar.
Unutmayın, dosya modları f open çağrısının ikinci parametresi.
Bu, ne yapacağınızı belirleyen şeydir ve hepsi
çift tırnak içinde.
Yani bir w yaparsanız, bu şu anlama gelir metin dosyasını yazmak üzere açmak için.
Eğer a yaparsanız, bu şu anlama gelir metin dosyasını ekleme için açmak için, tüm
yazmalar dosyanın sonuna yapılır.
Eğer bir r yaparsanız, açılır okumak için metin dosyası.
Herhangi birine bir artı eklerseniz bunlar, temel olarak dosya mevcut değilse
oluşturacaktır.
Yani bir w plus dosyası açarsanız, güncelleme için açacak ve dosyayı sıfıra
indirecektir varsa veya mevcut değilse yeni bir dosya oluşturabilir.
Diğerleri ile um yazacak veya okuyacak ve dosyanın var olması
gerekiyor.
Artı ile aynı, açılacak bir güncelleme için mevcut dosyanın sonuna
eklenmesi veya dosya mevcut değilse oluşturun.
Ve R Plus açılacak güncelleme için metin dosyası,
dosyayı oluşturmayacak çünkü boş olacak.
Yani okuma sadece r artısını gördüğünüzde hem okuma
hem de yazma.
Diğerinden biraz farklı Aslında var olmayan bir dosyayı
oluşturdukları artılar.
Yazma modu.
Eğer bir bilgisayara yazmak istiyorsanız myfile adında
mevcut bir metin dosyası. txt'yi oluşturduğunuzda dosya işaretçiniz, büyük harflerle.
Null olarak ayarlayın, null olarak başlatın.
Ve sonra belki de dosyanızı başka bir karakter
işaretçisi olarak, myfile. txt veya şunları yapabilirsiniz bunu ilk parametre olarak
geçirin ve sonra sadece f open deyin.
F dosya adını açın ve ardından w içine dosyayı yazmak için açar ve bir
dosya işaretçisi döndürür.
Bu yüzden p dosyanız var atamanın solunda.
Daha sonra şunları yapmak için kontrol etmek istersiniz p dosyasının null'a eşit olmadığından emin olun.
Çünkü eğer null ise, eğer herhangi bir nedenle
açılamadı belki dosya adı yanlıştı ya da var olmasaydı, o zaman ona yazamazdınız.
Bu yüzden her zaman f kontrol edin ve açılmazsa
bazı bilgileri yazdırın.
Bu kod dosyayı açacaktır ve dosyayı myfile adıyla
ilişkilendirecektir. ile txt dosya işaretçileriniz fp dosyası.
w modu sadece şunları yazabileceğimiz anlamına gelir dosyasına erişemezsiniz, dosyadan okuyamazsınız.
Eğer benim dosyam adında bir dosya metin mevcut değilse,
f open çağrısı yeni bir metin oluşturacaktır. bu
isimde bir dosya ve bu w seçeneği ile f açmak içindir.
Bir önceki bölümde gördüğümüz gibi modlarında, w plus mevcut değilse dosyayı oluşturacaktır
ancak ayrıca dosyayı sıfıra kadar keser.
W'nin farkı bu.
w eğer yaratacak mevcut değildir, ancak sıfıra
kadar kesmeyecektir.
Yani bu standart yol çift tırnak içinde w kullanarak
dosyaları açar.
Yalnızca dosya adını verirseniz herhangi bir yol
belirtimi olmadan, bu yüzden bu Örneğin, bir yol
hatırlama dizinlerin adıdır.
Adını sağlamazsanız dizinlerindeyse, o dosyanın geçerli dizinde
olduğunu varsayacaktır programın yürütüldüğü her yerde.
Eğer gerçekten açmak istiyorsanız bir dosyayı gerçekte
bulunmadığı başka bir yere programlar dizinindeyse, tüm yolu belirtmeniz
gerekir.
Buna mutlak yol denir.
Hiçbir yol sağlamadığınızda genellikle göreli yol, programın
çalıştığı yere görelidir.
Yani ikisinden birini belirtebilirsiniz mutlak veya göreli yol,
sadece nerede olduğunu bildiğinizden emin olun ve sen doğru olanı yapıyorsun.
Göreceli yollar genellikle daha iyidir çünkü o zaman bağımlı olmaz.
Eğer biri taşınmış olsaydı o dosyanın nereye taşındığına
bağlı değildir.
Ve aslında yapabilirsin göreli yol ve dizinleri geri gidebilirsiniz,
böylece bir nokta eğik çizgi ve bu programın çalıştığı yere göre sadece
birkaç dizin geriye gidiyorum.
Bir mutlak değer kullandığınızda yolu, aslında c kolon
programı gibi bir şey olacaktır Windows kullanıyorsanız dosyalar.
Ve eğer bu dosya taşınırsa programı onu açamayacaktır.
Yani yazmak için bir dosya açarken dosya bağlantısı
sıfıra kesilir ve konum ilk işlem için mevcut verilerin
başında yer alır.
Daha önce herhangi bir veri dosyaya yazılanlar kaybolacak ve herhangi
bir yazma işlemi tarafından üzerine yazılacaktır.
Yani tekrar belirtmek gerekirse üzerinde artı varsa, bu sadece okuma yazma
bilmediğiniz anlamına gelir.
Bu sadece yazılabilir.
Sadece W haklı.
W plus, okuma ve yazma bildiğiniz anlamına gelir.
Ekleme modu.
Mevcut bir dosyaya eklemek istiyorsanız metin dosyasının üzerine yazmak yerine
a modunu belirtebilirsiniz.
Bu bağlı.
Bu, dosyayı en sona yerleştirir önceden yazılmış tüm verilerin silinmesini sağlar.
Dosya mevcut değilse, yeni bir tane oluşturur.
Buradaki örnek, sadece ikinci parametreyi çift tırnak içinde bir a olarak
değiştirirseniz dosyamın sonuna ekleyecektir. txt.
Ve unutmayın ki her zaman dönüş değerini
null için test etmelidir.
Her zaman eğer yapmak istersiniz p dosyası null değerine eşit değil.
Bir dosyayı append içinde açtığınızda modunda ise, tüm yazma
işlemleri veri sonunda her yazma işleminde dosya.
Tüm yazma işlemleri ekler dosyasına veri ekleyemezsiniz
ve dosyadaki mevcut içeriği güncelleyemezsiniz. bu modda, hepsi sonda.
Okuma modunda şunları açabiliriz bir dosyayı okumak için dosyayı yukarı kaldırın.
Biz sadece r çift tırnak içinde.
Bu yalnızca okunur, siz dosyaya yazamaz.
Eğer R Plus yaparsanız okuma ve yazma bilmelidir.
Yani diğer aramalar gibi görünüyor, sadece bir f open yaparsınız, dosyanın adını
girersiniz ve ardından çift olarak r bir dosya işaretçisi döndüren alıntılar.
Dosyayı da konumlandıracağız verilerin başlangıcına.
Eğer sadece okuyacaksan dosya zaten mevcut olmalıdır.
Sen gitmiyorsun boş bir dosya okuyun.
Bu yüzden, yeni bir dosya mevcut değil, sadece boş olacak
veya geri alacaksınız dosya rakibi boş olacaktır.
için bir dosya açmaya çalışırsanız mevcut değilse,
null işaretçisini döndürür.
Eğer varsa ve boşsa, sadece hiçbir veri döndürmezsiniz.
Her zaman kontrol etmek istersiniz f open'dan değer dönüşü.
Tekrar söylüyorum, bunu ikinci kez, bu önemli.
Çünkü eğer null pointer ise, programınız çökecek,
kötü bir şey yapacak.
Bir dosyayı yeniden adlandırmak.
Artık bir dosyayı nasıl açacağımızı biliyoruz.
Bir dosyayı açmak ilk işleminde, modu ve dosyanın
adını belirtirsiniz.
Bu size dosyayı geri verir artık başka şeyler yapmak için
kullanabileceğiniz işaretçi.
Bir dosyayı yeniden adlandırmak bazen önemlidir.
Bu çok kolay.
Sadece yeniden adlandırma işlevini kullanırsınız.
Eski bir isim ve yeni bir sabit karakter işaretçileri olarak
adlandırır ve bir int döndürür.
Döndürülen tamsayı isim değişikliği başarılıysa sıfır,
aksi takdirde sıfır olmayan değer olur.
Dosya açık olmamalıdır yeniden adlandır dediğinizde.
Aksi takdirde, başarısız olacak çünkü kullanımdayken bir dosyayı
yeniden adlandıramazsınız.
Yani burada yapabileceğiniz şey sadece yeniden adlandır deyin, eski dosya adını ve
yeni dosya adını girin.
Bu örnekte şunları kullanıyoruz Windows'ta bir dosyaya giden yol.
Ve biliyorsun ki Çünkü iki nokta üst üste görüyorum.
Ayrıca fark ettiniz ki ters eğik çizgi iki kez var.
Bunun nedeni ise ters eğik çizgi c'de özel bir karakterdir.
Ters eğik çizgi n bir satır geri bildirimidir.
Ters eğik çizgi r satır başıdır.
Bu yüzden ters eğik çizgi özel programdaki anlamı.
Eğer gerçekten kullanmak istiyorsanız Windows'un yaptığı gibi, bir dizindeki
bir yol için ters eğik çizgi iki tane temin etmek zorundasınız.
Ve bu yüzden burada yeniden adlandırıyoruz bir myfile. txt geçici dizini
bulma.
Dosyamı alt çizgi olarak yeniden adlandırıyoruz Anlaşıldı. deneme dizinindeki metin.
Ve eğer bu eşit değilse başarısız olacaktır.
Sadece bir çıktı alıyoruz başarısız olduğunu söyleyen çıktı.
Aksi takdirde, çıktınız başarılı olur.
Bu değişecek dosyamın adı. txt dosyasını geçici dizine kopyaladım.
Dosya yolu yanlışsa veya dosya mevcut değilse, yeniden adlandırma
yapamayacaktır.
Ayrıca bir dosyayı kapatabilir ve bir dosyayı her açtığınızda bunu yapmak için.
Yani işiniz bittiğinde dosyasının kendisi, işletim sistemine
bu dosyayı boşaltmasını söylemek istersiniz.
Unutmayın, bir sınır var herhangi bir zamanda
kaç dosya açabileceğinizi belirler.
Bunu şu çağrıyı yaparak yapabilirsiniz f kapanış fonksiyonu.
F close bir dosyayı kabul eder işaretçisini bir argüman olarak kullanır.
Unutmayın, dosya işaretçisi dosyayı temsil eder.
Bir eof döndürür.
Eof bir int değeridir.
Bir hata oluşursa eof döndürür.
Eof özel bir karakterdir dosya sonu karakteri olarak adlandırılır.
Standartio'da tanımlanmıştır. h negatif bir tamsayı olarak.
Genellikle eşdeğerdir negatif olana.
F kapatma işlemi başarılı olduysa, sıfır döndürecektir.
Böylece şunları kontrol edebilirsiniz Başarısız için eof.
Sadece "f close pass" diyorsun. işaretçisini kullanıyorsanız, işaretçiyi
null olarak ayarlayabilir ve f close, işaretçi ile p dosyası arasındaki
bağlantının ve fiziksel dosya bozuldu.
P dosyası artık kullanılamaz okuma, yazma veya ekleme ya da
yeniden adlandırma için dosyaya erişmek için.
Eğer dosyaya yazılıyorsa, çıktı tamponunun geçerli içeriği aşağıdaki dosyaya
yazılır verilerin kaybolmadığından emin olun.
Yani bu konuda herhangi bir sorununuz yok. veri bütünlüğü varsa, dosyayı
gerçekten kapatmayacaksınız. başka bir başlıkta yazılıyor.
Yani iplik güvenli.
Konu hakkında konuşmadık, bu daha gelişmiş bir konsept.
Ama burada birden fazla programınızdaki yürütme noktaları.
Bu iyi bir programlama pratiğidir gibi, bir dosyayla işiniz biter
bitmez dosyayı kapatmak için işiniz bittiğinde belleği boşaltmak
iyi bir programlama uygulamasıdır onunla, dosyaları kapatmak için de aynı.
Çıktı veri kaybına karşı koruma sağlar.
Ayrıca bir dosyayı da kapatmalısınız yeniden adlandırmaya
veya kaldırmaya çalışmadan önce kapatılırsa açılamaz.
Bir dosyayı silmeye ne dersiniz?
Bir dosyayı şu şekilde silebilirsiniz kaldırma işlevini çağırmak.
Bu aynı zamanda standardio'da da beyan edilmiştir. h.
Tüm dosya işlemleri standartta beyan edilmiştir. ioh.
Her zaman gidip şuna bakabilirsiniz c başlık dosyalarının kurulu
olduğu her yerde isterseniz başlık dosyası.
Yani sadece kaldır diyorsun dosyanın adı.
Burada yapmanıza gerek yok dosya işaretçisini kullanın.
Çünkü diyebilirsiniz. kaldırmak için dosyanın
gerçekten açık olması gerekmez.
Yeniden adlandırma ile aynı çünkü aslında dosyaların açık olmasını istemezsiniz çünkü yeniden
adlandırın yoksa kaldırma işlemi başarısız olur.
Dosyayı silecek myfile adını taşıyan bir dosya. geçerli dizinden
txt.
Bu, göreceli bir yol sağlar.
Bu dosyayı arayacak programın yürütüldüğü her yerde.
Aksi takdirde, şunları yapmanız gerekir mutlak bir yol sağlar.
Aşağıdaki durumlarda dosya açılamaz silmeyi deneyin, tıpkı yeniden adlandırmak gibi.
Her zaman iki kez kontrol etmelisiniz dosya silme işlemleri ile.
Kendini mahvedebilirsin. Eğer yapmazsanız sistem.
Silme işlemi çok pahalı bir işlemdir, çok tehlikeli bir operasyondur.
Dosyaları silmek sorunlara neden olabilir.
O yüzden dikkatli ol.
Bu dersteki tüm bilgiler dosyalara erişimle ilgiliydi, dosyaları nasıl açabileceğinizi,
hangi okumadan ve yazmadan önce yapmanız gerekenler ve ayrıca nasıl
dosyaları silebilir, yeniden adlandırabilir ve kullanmayı bitirdiğinizde kapatabilirsiniz.
Her şeyin temeli o dosya işaretçisini kapatın.
Bu yüzden dosya işaretçisini anlayın ve içerdiği yapı.
Oldukça faydalı şeyler.
Standart io başlığı şunları içerir tüm bu harika bilgiler.
Önümüzdeki birkaç derste metin
dosyalarını okuma ve yazma hakkında konuşmak için, aslında veri ekleme veya okuma.
Teşekkür ederim. Umarım bu yardımcı olmuştur.