Aracılığıyla paylaş


Dosya İşleme ve G/Ç (C++/CLI)

.NET Framework kullanarak çeşitli dosya işlemlerini gösterir.

Aşağıdaki konular, çeşitli dosya işlemleri gerçekleştirmek için ad alanında tanımlanan sınıfların System.IO kullanımını gösterir.

Dizindeki Dosyaları Listeleme

Aşağıdaki kod örneği, bir dizindeki dosyaların listesinin nasıl alınduğunu gösterir. Ayrıca alt dizinler numaralandırılır. Aşağıdaki kod örneği, C:\Windows dizininin içeriğini görüntülemek için ve GetDirectories yöntemlerini kullanır.GetFilesGetFiles

Örnek

// enum_files.cpp
// compile with: /clr
using namespace System;
using namespace System::IO;

int main()
{
   String^ folder = "C:\\";
   array<String^>^ dir = Directory::GetDirectories( folder );
   Console::WriteLine("--== Directories inside '{0}' ==--", folder);
   for (int i=0; i<dir->Length; i++)
      Console::WriteLine(dir[i]);

   array<String^>^ file = Directory::GetFiles( folder );
   Console::WriteLine("--== Files inside '{0}' ==--", folder);
   for (int i=0; i<file->Length; i++)
      Console::WriteLine(file[i]);

   return 0;
}

Dosya Sistemi Değişikliklerini İzleme

Aşağıdaki kod örneği, oluşturulan, değiştirilen, silinen veya yeniden adlandırılan dosyalara karşılık gelen olaylara kaydolmak için kullanır FileSystemWatcher . Dosyalarda yapılan değişiklikler için bir dizini düzenli aralıklarla yoklama yerine, bir değişiklik algılandığında olayları tetiklerken sınıfını kullanabilirsiniz FileSystemWatcher .

Örnek

// monitor_fs.cpp
// compile with: /clr
#using <system.dll>

using namespace System;
using namespace System::IO;

ref class FSEventHandler
{
public:
    void OnChanged (Object^ source, FileSystemEventArgs^ e)
    {
        Console::WriteLine("File: {0} {1}",
               e->FullPath, e->ChangeType);
    }
    void OnRenamed(Object^ source, RenamedEventArgs^ e)
    {
        Console::WriteLine("File: {0} renamed to {1}",
                e->OldFullPath, e->FullPath);
    }
};

int main()
{
   array<String^>^ args = Environment::GetCommandLineArgs();

   if(args->Length < 2)
   {
      Console::WriteLine("Usage: Watcher.exe <directory>");
      return -1;
   }

   FileSystemWatcher^ fsWatcher = gcnew FileSystemWatcher( );
   fsWatcher->Path = args[1];
   fsWatcher->NotifyFilter = static_cast<NotifyFilters>
              (NotifyFilters::FileName |
               NotifyFilters::Attributes |
               NotifyFilters::LastAccess |
               NotifyFilters::LastWrite |
               NotifyFilters::Security |
               NotifyFilters::Size );

    FSEventHandler^ handler = gcnew FSEventHandler();
    fsWatcher->Changed += gcnew FileSystemEventHandler(
            handler, &FSEventHandler::OnChanged);
    fsWatcher->Created += gcnew FileSystemEventHandler(
            handler, &FSEventHandler::OnChanged);
    fsWatcher->Deleted += gcnew FileSystemEventHandler(
            handler, &FSEventHandler::OnChanged);
    fsWatcher->Renamed += gcnew RenamedEventHandler(
            handler, &FSEventHandler::OnRenamed);

    fsWatcher->EnableRaisingEvents = true;

    Console::WriteLine("Press Enter to quit the sample.");
    Console::ReadLine( );
}

İkili Dosya Okuma

Aşağıdaki kod örneğinde, ad alanından iki sınıf kullanarak dosyadan ikili verilerin nasıl okunduğu System.IO gösterilmektedir: FileStream ve BinaryReader. FileStream gerçek dosyayı temsil eder. BinaryReader , ikili erişime izin veren bir akış arabirimi sağlar.

Kod örneği data.bin adlı bir dosyayı okur ve ikili biçimde tamsayılar içerir. Bu dosya türü hakkında bilgi için bkz . Nasıl yapılır: İkili Dosya Yazma (C++/CLI).

Örnek

// binary_read.cpp
// compile with: /clr
#using<system.dll>
using namespace System;
using namespace System::IO;

int main()
{
   String^ fileName = "data.bin";
   try
   {
      FileStream^ fs = gcnew FileStream(fileName, FileMode::Open);
      BinaryReader^ br = gcnew BinaryReader(fs);

      Console::WriteLine("contents of {0}:", fileName);
      while (br->BaseStream->Position < br->BaseStream->Length)
         Console::WriteLine(br->ReadInt32().ToString());

      fs->Close( );
   }
   catch (Exception^ e)
   {
      if (dynamic_cast<FileNotFoundException^>(e))
         Console::WriteLine("File '{0}' not found", fileName);
      else
         Console::WriteLine("Exception: ({0})", e);
      return -1;
   }
   return 0;
}

Metin Dosyasını Okuma

Aşağıdaki kod örneğinde, ad alanında tanımlanan System.IO sınıfı kullanarak StreamReader bir metin dosyasının her seferinde bir satır olarak nasıl açılıp okunduğu gösterilmektedir. Bu sınıfın bir örneği bir metin dosyasını açmak için kullanılır ve ardından System.IO.StreamReader.ReadLine her satırı almak için yöntemi kullanılır.

Bu kod örneği textfile.txt adlı ve metin içeren bir dosyayı okur. Bu dosya türü hakkında bilgi için bkz . Nasıl yapılır: Metin Dosyası Yazma (C++/CLI).

Örnek

// text_read.cpp
// compile with: /clr
#using<system.dll>
using namespace System;
using namespace System::IO;

int main()
{
   String^ fileName = "textfile.txt";
   try
   {
      Console::WriteLine("trying to open file {0}...", fileName);
      StreamReader^ din = File::OpenText(fileName);

      String^ str;
      int count = 0;
      while ((str = din->ReadLine()) != nullptr)
      {
         count++;
         Console::WriteLine("line {0}: {1}", count, str );
      }
   }
   catch (Exception^ e)
   {
      if (dynamic_cast<FileNotFoundException^>(e))
         Console::WriteLine("file '{0}' not found", fileName);
      else
         Console::WriteLine("problem reading file '{0}'", fileName);
   }

   return 0;
}

Dosya Bilgilerini Alma

Aşağıdaki kod örneği sınıfını FileInfo gösterir. Bir dosyanın adına sahip olduğunuzda, dosya boyutu, dizin, tam ad, oluşturma tarihi ve saati ve son değişiklik gibi dosya hakkındaki bilgileri almak için bu sınıfı kullanabilirsiniz.

Bu kod, Not Defteri.exe dosyasının dosya bilgilerini alır.

Örnek

// file_info.cpp
// compile with: /clr
using namespace System;
using namespace System::IO;

int main()
{
   array<String^>^ args = Environment::GetCommandLineArgs();
   if (args->Length < 2)
   {
      Console::WriteLine("\nUSAGE : file_info <filename>\n\n");
      return -1;
   }

   FileInfo^ fi = gcnew FileInfo( args[1] );

   Console::WriteLine("file size: {0}", fi->Length );

   Console::Write("File creation date:  ");
   Console::Write(fi->CreationTime.Month.ToString());
   Console::Write(".{0}", fi->CreationTime.Day.ToString());
   Console::WriteLine(".{0}", fi->CreationTime.Year.ToString());

   Console::Write("Last access date:  ");
   Console::Write(fi->LastAccessTime.Month.ToString());
   Console::Write(".{0}", fi->LastAccessTime.Day.ToString());
   Console::WriteLine(".{0}", fi->LastAccessTime.Year.ToString());

   return 0;
}

İkili Dosya Yazma

Aşağıdaki kod örneği, bir dosyaya ikili veri yazmayı gösterir. Ad alanından System.IO iki sınıf kullanılır: FileStream ve BinaryWriter. FileStream gerçek dosyayı temsil ederken BinaryWriter , akış için ikili erişime izin veren bir arabirim sağlar.

Aşağıdaki kod örneği, ikili biçimde tamsayılar içeren bir dosya yazar. Bu dosya, Nasıl yapılır: İkili Dosya Okuma (C++/CLI) içindeki kodla okunabilir.

Örnek

// binary_write.cpp
// compile with: /clr
#using<system.dll>
using namespace System;
using namespace System::IO;

int main()
{
   array<Int32>^ data = {1, 2, 3, 10000};

   FileStream^ fs = gcnew FileStream("data.bin", FileMode::Create);
   BinaryWriter^ w = gcnew BinaryWriter(fs);

   try
   {
      Console::WriteLine("writing data to file:");
      for (int i=0; i<data->Length; i++)
      {
         Console::WriteLine(data[i]);
         w->Write(data[i]);
      }
   }
   catch (Exception^)
   {
     Console::WriteLine("data could not be written");
     fs->Close();
     return -1;
   }

   fs->Close();
   return 0;
}

Metin Dosyası Yazma

Aşağıdaki kod örneği, ad alanında tanımlanan sınıfını kullanarak StreamWriter bir metin dosyası oluşturmayı ve bu dosyaya System.IO metin yazmayı gösterir. StreamWriter Oluşturucu, oluşturulacak dosyanın adını alır. Dosya varsa, dosyanın üzerine yazılır (ikinci StringWriter oluşturucu bağımsız değişkeni olarak True geçirmediğiniz sürece).

Dosya daha sonra ve WriteLine işlevleri kullanılarak Write dosyalanır.

Örnek

// text_write.cpp
// compile with: /clr
using namespace System;
using namespace System::IO;

int main()
{
   String^ fileName = "textfile.txt";

   StreamWriter^ sw = gcnew StreamWriter(fileName);
   sw->WriteLine("A text file is born!");
   sw->Write("You can use WriteLine");
   sw->WriteLine("...or just Write");
   sw->WriteLine("and do {0} output too.", "formatted");
   sw->WriteLine("You can also send non-text objects:");
   sw->WriteLine(DateTime::Now);
   sw->Close();
   Console::WriteLine("a new file ('{0}') has been written", fileName);

   return 0;
}

Ayrıca bkz.

C++/CLI (Visual C++) ile .NET Programlama
Dosya ve Akış G/Ç'si
System.IO ad alanı