Pliki i obsługa strumieni
• Klasy w przestrzeni System.IO
• Operacje na katalogach
• – tworzenie i usuwanie,
• - kopiowanie i przenoszenie,
• - odczytywanie informacji o katalogu
• Obsługa plików
• - tworzenie i usuwanie,
• - kopiowanie i przenoszenie,
• - odczytywanie informacji o pliku.
• Strumienie - obsługa plików tekstowych
2016-12-14 Metody programowania – 1 W8 2
Klasy w przestrzeni System.IO
Klasy obsługujące pliki i katalogi znajdują się w przestrzeni nazw System.IO
Zestaw podstawowych klas operujących na plikach i katalogach zawiera tabela 8.1
Klasa Opis
Directory Udostępnia metody do operowania na katalogach np.
przenoszenie
File Udostępnia podstawowe mechanizmy do tworzenia, usuwania i przenoszenia plików
Path Przetwarzanie informacji o ścieżkach katalogów i plików DirectoryInfo Podobne działanie jak klasa Directory, jej metody nie
wykonują testów bezpieczeństwa
FileInfo Jak klasa File bez testów bezpieczeństwa
FileSystemInfo Klasa bazowa dla DirectoryInfo i FileInfo
using System;
using System.IO;
namespace TworzenieKatalogu {
class Program {
static void Main(string[] args) {
if (!Directory.Exists("E:\\NowyKatalog\\Podkatalog")) {
Directory.CreateDirectory("E:\\NowyKatalog\\Podkatalog");
Directory.CreateDirectory("E:\\NowyKatalog\\InnyKatalog");
}
Console.WriteLine("Aby kontynuować naciśnij dowolny klawisz...");
Console.ReadKey();
// A teraz usuniemy ten katalog
if (Directory.Exists("E:\\NowyKatalog\\Podkatalog")) {
Directory.Delete("E:\\NowyKatalog\\Podkatalog");
// Usunięto podkatalog
Console.WriteLine("Aby kontynuować naciśnij dowolny klawisz...");
Console.ReadKey();
// Usuwam katalogi
Directory.Delete("E:\\NowyKatalog", true);
}
Console.WriteLine("Aby kontynuować naciśnij dowolny klawisz...");
Console.ReadKey();
} } }
2016-12-14 Metody programowania – 1 W8 4
Odczytywanie informacji o katalogu – klasa DirectoryInfo
Najważniejsze właściwości i metody tej klasy zebrano w tabeli 8.2
Właściwość/
Metoda
Opis
Attributes Atrybuty katalogu
CreationTime Czas utworzenia katalogu
CreationTimeUTC Czas utworzenia katalogu w formacie UTC (Coordinal Universal Time)
FullName Pełna ścieżka do katalogu
LastAccessTime Czas ostatniego dostępu do katalogu
LastAccessTimeUTC Czas ostatniego dostępu do katalogu w formacie UTC
LastWriteTime Czas ostatniego zapisu do katalogu
LastWriteTimeUTC Czas ostatniego zapisu do katalogu w formacie UTC
Name Metoda – zwraca nazwę katalogu
FullName Metoda - zwraca pełną ścieżkę do katalogu
Parent Metoda – zwraca katalog macierzysty
2016-12-14 Metody programowania – 1 W8 6
using System;
using System.IO;
namespace Directory_info_plik {
class Program {
static void Main(string[] args) {
DirectoryInfo katalog =
new DirectoryInfo(@"E:\Zajecia_zima_2016\UJW\Metody_programowania_1W\Metody_progr_8
\Directory_info_plik\Directory_info_plik\bin\Debug");
// Wszystkie pliki
FileInfo[] prezentacje = katalog.GetFiles("*.*");
// Ile jest tam plików ?
Console.WriteLine("Znaleziono {0} plików", prezentacje.Length);
// Wyświetlamy informacje o każdym pliku foreach (FileInfo fi in prezentacje) {
Console.WriteLine("========================================================");
Console.WriteLine(" Nazwa pliku: {0} ", fi.Name);
Console.WriteLine(" Wielkość pliku: {0}kB ", fi.Length/1000);
Console.WriteLine(" Czas utworzenia: {0} ", fi.CreationTime);
Console.WriteLine(" Ostatni zapis: {0} ", fi.LastWriteTime);
Console.WriteLine(" Atrybuty: {0} ", fi.Attributes.ToString());
Console.WriteLine("========================================================");
Console.Write("Dalej...");
Console.ReadKey();
}
Console.Write("Aby zakończyć naciśnij dowolny klawisz...");
Console.ReadKey();
} } }
2016-12-14 Metody programowania – 1 W8 8
using System;
using System.Windows.Forms;
using System.IO;
namespace KatalogInformacje {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
lbKatalog.Items.Clear();
}
private void butKatalogInfo_Click(object sender, EventArgs e) {
// Będziemy czytać informacje o katalogu macierzystym // bieżacej aplikacji
DirectoryInfo katalogInfo =
new DirectoryInfo(Application.StartupPath);
lbKatalog.Items.Add("Atrybuty: " + katalogInfo.Attributes);
lbKatalog.Items.Add("Pełna ścieżka: " + katalogInfo.FullName);
lbKatalog.Items.Add("Katalog macierzysty: " + katalogInfo.Parent);
lbKatalog.Items.Add("Data utworzenia: " +
katalogInfo.CreationTime.ToShortDateString());
lbKatalog.Items.Add("Data ostatniego dostępu: " +
katalogInfo.LastAccessTime.ToShortDateString());
lbKatalog.Items.Add("Czas zapisu: " +
katalogInfo.LastWriteTime.ToLongTimeString());
} } }
2016-12-14 Metody programowania – 1 W8 10
using System;
using System.IO;
namespace KlasaFileSystemInfo {
class Program {
static readonly int depth = 4;
public static void ShowDir(string katalog, int głębokość) {
if (głębokość <= depth) {
Console.WriteLine("Podkatalogi w katalogu " + katalog);
foreach (string nazwaPliku in Directory.GetFiles(katalog,
"*.*")) {
Console.WriteLine(" - Pliki w katalogu " +
Path.GetFileName(nazwaPliku));
foreach (string subDir in
Directory.GetDirectories(katalog)) ShowDir(subDir, głębokość + 1);
}
Console.ReadKey();
}
}
static void Main() {
string dir = @"e:\cSharp2006\Nauka";
DirectoryInfo di = new DirectoryInfo(dir);
di.Refresh();
DateTime IODate = di.CreationTime;
Console.WriteLine("{0:d}", IODate);
//
string file = @"e:\cSharp2006\Nauka\Trasy\Program.cs";
FileInfo fi = new FileInfo(file);
// Dane katalogu if (fi.Exists) {
fi.Refresh();
IODate = fi.CreationTime;
Console.WriteLine("{0:d}", IODate);
Console.WriteLine(fi.Name);
Console.WriteLine(fi.Extension);
FileAttributes attrib = fi.Attributes;
Console.WriteLine((byte)attrib);
Console.WriteLine(attrib);
Console.ReadKey();
// Dodanie katalogu
string nowyPodkatalog = "testowy";
string ścieżka = dir + @"\" + nowyPodkatalog;
2016-12-14 Metody programowania – 1 W8 12
if (!Directory.Exists(ścieżka)) {
Directory.CreateDirectory(ścieżka);
Console.WriteLine("Utworzono katalog " + ścieżka + " sprawdź !");
}
Console.ReadKey();
}
string doUsunięcia = dir + @"\testowy";
if (Directory.Exists(doUsunięcia)) {
Directory.Delete(doUsunięcia);
Console.WriteLine("Usunięto katalog " + doUsunięcia);
}
Console.ReadKey();
ShowDir("e:\\cSharp2006\\",3);
Console.ReadKey();
//
// Wyświetlanie in formacji o pliku //
if (fi.Exists) {
Console.WriteLine("Plik {0}\n - długość {1}\n - nazwa {2}\n - katalog {3}\n - utworzony {4:d}\n - modyfikowany {5:d}", file, fi.Length, fi.Name, fi.DirectoryName, fi.CreationTime, fi.LastAccessTime);
}
Console.ReadKey();
// Pisanie danych do pliku
Console.WriteLine("Pisanie tekstu do pliku");
FileInfo ftx = new FileInfo(@"e:\cSharp2006\Nauka\test.txt");
FileStream fstr = ftx.Create();
StreamWriter sw = new StreamWriter(fstr);
sw.Write("To jest plik testowy\nsprawdzamy jak się pisze i czyta tekst do
pliku\ni z pliku dyskowego");
sw.Write("Numerki {0}, {1}, {2}", 1, 2, 3*3.333);
sw.Close();
fstr = ftx.OpenRead();
StreamReader sr = new StreamReader(fstr);
string tekst;
while ((tekst = sr.ReadLine()) != null) {
Console.WriteLine(tekst);
}
sr.Close();
fstr.Close();
Console.ReadKey();
} }
}
2016-12-14 Metody programowania – 1 W8 14
Typ wyliczeniowy FileAttributes – tabela 8.3 Wartość typu
FileAttributes
Opis
Archive Status archiwalny pliku lub katalogu; aplikacja zaznacza w ten sposób pliki do archiwizacji lub usunięcia
Compressed Plik lub katalog skompresowany
Directory Element jest katalogiem, a nie plikiem
Encrypted Plik lub katalog zaszyfrowany Hidden Plik lub katalog ukryty
Normal Plik lub katalog normalny – nie ustawiono innych atrybutów Offline Plik lub katalog niedostępny
LastWriteTimeUTC Czas ostatniego zapisu do katalogu w formacie UTC ReadOnly Plik lub katalog tylko do odczytu
System Plik systemowy – stanowi część systemu operacyjnego lub system
operacyjny ma do niego wyłączność
2016-12-14 Metody programowania – 1 W8 16
Obsługa plików tekstowych – strumienie
Do obsługi strumieni plików wykorzystuje się klasę FileStream a do obsługi strumieni w pamięci – klasę MemoryStream.
Do odczytu danych ze strumieni wykorzystuje się obiekty klasy StreamReader a do zapisu do strumieni – obiekty klasy StreamWriter.
Jeden z przeciążonych konstruktorów klasy FileStream wymaga podania następujących parametrów: ścieżki do pliku, trybu otwarcia pliku, trybu dostępu do pliku.
Wartości typu wyliczeniowego FileMode określające tryb otwarcia pliku zestawiono w tabeli 8.4
Wartość Opis
Append
Tworzy lub otwiera plik i przechodzi na jego koniec (z parametrem FileAccess.Write)Create
Tworzy plik, a jeżeli już istnieje, to zastępuje jego starą zawartośćCreateNew
Tworzy plik, a jeżeli już istnieje, to generuje odpowiedni wyjątekOpen
Otwiera nowy plik do odczytu, a jeżeli nie istnieje, to generuje wyjątekOpenOrCreate
Otwiera plik, a jeżeli nie istnieje – tworzy nowyTruncate
Otwiera plik i czyści jego zawartośćObject
TextReader
StreamReader
StringReader
TextWriter
StreamWriter
StringWriter
Abstrakcyjna klasa bazowa
Klasa potomna
Klasa potomna
Abstrakcyjna klasa bazowa
Klasa potomna
Klasa potomna
2016-12-14 Metody programowania – 1 W8 18