C++’da Dosya Sistemi Yönetimi (Filesystem)

Uzun zamandır blok yazısı yazmayı bıraktıktan sonra C++’da klasör yönetimi için nasıl kod yazarım konusunda yaptığım araştırmalarda C++17 standartı içerisinde artık dosya sistemi yönetimi için bir özelliğin standart kütüphaneye dahil edilmiş olduğunu gördüm. Bilindiği üzere dosya sistemi işletim sistemi ve kullandığı dosya yönetim yapısına göre farklılık arzettiği için C++’ın ilk tasarımında bu özellik için bir kütüphane ekli değildi. Dosya işlemlerini yapmak için hangi işletim sistemi için kodlama yapıyorsak o işletim sisteminin dosya yönetim mantalitesine uygun kütüphaneleri eklememiz gerekiyordu.

C++17 sürümünde artık <filesystem> adında bir kütüphane ile bu özellikler tek çatı altında toplanmıştır. Sürecin ilerlemesi ve konu hakkında detaylara bakacakları aşağıdaki siteleri incelemeye davet ederim.

CppReference::FileSystem & CppReference::FileSystem Documentation (Deneme aşamasında)

CppReference sitesinde filesystem kütüphanesinin Boost.FileSystem kütüphanesinden esinlenerek tasarlandığı beriltilmektedir. Bu nedenle İnternette kullanımı ile ilgili yeterince örnek göremeyen arkadaşlara Boost’un sayfasındaki örnekleri incemeyi tavsiye ederim. Bu sayfada filesystem kütüphanesi ile yapılan her işlem için bir örnek gösterilmektedir.

Aşağıda benim için gerekli olan bir klasör altındaki belli bir uzantıya sahip dosyaları bulan ve bunların adlarını listeleyen bir örnek gösterilmektedir.

/*
	In this example I want to show basic folder operations in C++. Here We have a modern approch introduced in C++17 standart. 
	In the documentation from C++reference site (https://en.cppreference.com/w/cpp/experimental/fs)
	we see that it is directly based on Boost.Filesystem library https://www.boost.org/doc/libs/1_75_0/libs/filesystem/doc/index.htm
	In boost web site you can find more documenatation which is also adaptable to cpp std::filesystem library.
	Note that there is a warning about the underlying filesystem. Some features are not in stable statu in all filesystems.
*/

#include <iostream>
#include <fstream>
#include <filesystem>  //https://en.cppreference.com/w/cpp/filesystem
using namespace std;
using namespace std::filesystem;

int main()
{
	try {
		path p(".\\"); //gets the current path.

		if (!is_directory(p)) {
			cout << "!not in a accessable directory!" << endl;
			return 1;
		}
		cout << "Current Path:" << absolute(p) << endl;
		cout << "--------------------------------------" << endl;
		cout << "Text (.txt) files in this folder" << endl;
		cout << "--------------------------------------" << endl;
		for (const directory_entry& dre : directory_iterator(p))
		{
			if (!is_directory(dre))    // is a file
			{
				if (dre.path().extension() == ".txt")
				{
					cout << dre.path().filename() << endl;
				}
			}
		}
	}
	catch (const filesystem_error& ex)
	{
		cout << ex.what() << endl;
	}
}Code language: C++ (cpp)

Not: Bu kod parçasının derlenebilmesi için derleyicinizde C++17 seçilmiş olması ve filesystem kütüphanesinin derleme işlemine tabi olması aynı zamanda üzerinde derleme yaptığınız sistemin uygun bir dosya sistemi kullanıyor olması gerekmektedir. GNU Compiler ve LLVM için gerekli bilgi Filesystem library – cppreference.com sayfasında verilmektedir.

Eğer Visual Studio2019 veya daha üst bir sürüm ile derleme yapıyorsanız projenizin ayarlarından C++17 derleme rutinini aktive etmeniz gerekmektedir. Bunun için Solution Explorer penceresinde projenize sağ tıklayarak Properties ekranını açarak ilgili ayarı seçebilirsiniz. Aşağıda olması gereken proje özellikleri gösterilmektedir.

Solution Explorer -> Your C++ project -> Properties

Yukarıdaki uygulamayı çalıştırdığınızda aktif klasör bilgisini ve bu klasörde bulunan .txt uzantılı dosyaları konsol ekranına basan aşağıdaki gibi bir çıktı elde edeceksiniz.

Uygulamanın çalıştırılması sonucu örnek ekran görüntüsü

C++ kategorisine gönderildi | , , , ile etiketlendi | Yorum yapın

omnet – inet .radioin is not connected to sibling or parent module

I have just start using omnet++ 4.1 and inet framework for a wireless simulation. I have just start programming on inet and I have lots of problems while writing a simple example. So I start to write some problems and possible solutions for them for me and others who have the same in their projects.

The first one is in a wireless network try 🙂 (the first try at all)

“radioin is not connected to sibling or parent module” this error occurs when I try to make a wireless node to communicate in a simple network enviorement. I have copy all the necessarry parts form a pre-prepared omnet.ini file but I have missed a point in the ned file. Because I have create the ned file by myself I have miss a command in connection part.

At the beginning of the connection section of the network .ned file the section headline must be:

connections allowunconnected:

instead of

connections:

and simulation can be run now.

omnet++ kategorisine gönderildi | 2 Yorum

General kategorisine gönderildi | 2 Yorum

Hello world!

gene, yine,yeniden 😀

General kategorisine gönderildi | 2 Yorum