Для работы с файлами и директориями в c# есть такие классы — System.IO.Path, System.IO.File, System.IO.Directory. Приведу примеры использования некоторых методов этих классов, на мой взгляд самых необходимых.
- Получим директории расположения файла
string path = @"c:\\site\path-to-files\file.txt"; string dirName = Path.GetDirectoryName(path); // dirName: c:\\path-to-files
Метод Path.GetDirectoryName() вернет такое же значение если передать такие пути c:\\site\path-to-files\ или c:\\site\path-to-files
- Получим имя файла
string fileName = Path.GetFileName(path); // fileName: file.txt
- Получим имя файла без разрешения
string fileNameWE = Path.GetFileNameWithoutExtension(path);</pre> // fileNameWE: file
- Получим разрешение файла
string fileExt = Path.GetExtension(path); // fileExt: .txt
- Проверим есть ли расширение у файла
bool hasExt = Path.HasExtension(path); // hasExt: true
- Проверим является ли путь абсолютным
bool isAbs = Path.IsPathRooted(path); // isAbs: true
Метод Path.IsPathRooted() вернет true если передать такой путь
\site\path-to-files\file.txt - Получим базовую директорию сайта
string baseDir = AppDomain.CurrentDomain.BaseDirectory; // baseDir c:\\site\
- Получим полный полный путь к файлу
path = AppDomain.CurrentDomain.BaseDirectory + @"path-to-files\file.txt"; // path: c:\\site\path-to-file\file.txt
Или если доступен HttpContext:
path = HttpContext.Current.Server.MapPath(@"path-to-files\file.txt");
Метод HttpContext.Current.Server.MapPath вернет тот же результат, если передать такие пути: \path-to-files\file.txt, path-to-files/file.txt или /path-to-files/file.txt
- Получим разделитель директорий
string pathSep = Path.DirectorySeparatorChar; // pathSep: \
- Получим полный путь файла зная имя директории и имя файла
path = dirName + Path.DirectorySeparatorChar + fileName;
Или используя специальный метод:
path = Path.Combine(dirName, fileName);
- Изменим расширение файла
string imagePath = Path.ChangeExtension(path, ".jpg"); // imagePath: c:\\site\path-to-files\file.jpg
- Получим список файлов
string[] files = Directory.GetFiles(dirName); // отсеиваем по шаблону, выберем только текстовые файлы files = Directory.GetFiles(dirName, @".\txt$");
Метод Directory.GetFiles() возвращает полные пути к файлам
- Получим список директорий
string[] dirs = dirs = Directory.GetDirectories(dirName);
Метод Directory.GetDirectories() возвращает полные пути к директориям
- Проверяем существование файла
bool isExisFile = File.Exists(path);
- Проверяем существование директории
bool isExisDir = Directory.Exists(dirName);
- Создаем пустой файл
File.Create(path).Close();
- Создаем файл с содержимым из строки
File.WriteAllText(path, "test file");
- Создаем файл из массива байтов
File.WriteAllBytes(path, new byte[10]);
- Копируем файл
File.Copy(path, otherPath);
- Перемещаем файл
File.Move(path, otherPath);
- Удаляем файл
File.Delete(path);
- Создаем директорию
Directory.CreateDirectory(dirName);
Метод Directory.CreateDirectory() создает все вложенные папки
- Для копирования директории пишем свой метод
public static void CopyDir(string FromDir, string ToDir) { Directory.CreateDirectory(ToDir); foreach (string fullName in Directory.GetFiles(FromDir)) File.Copy(fullName, ToDir + "\\" + Path.GetFileName(fullName)); foreach (string fullName in Directory.GetDirectories(FromDir)) CopyDir(fullName, ToDir + "\\" + Path.GetFileName(fullName)); }
- Перемещаем директорию
Directory.Move(dirName, otherDirName);
- Удаляем директорию
Directory.Delete(dirName);
- Получим размер файла
long fileSize = new FileInfo(fileName).Length;
Для начинающих интересно было бы если б примеры были бы законченными, а так вырванные из контекста методы, которые для начинающих пустой звук.