Getcwd дать текущий каталог


Getcwd дать текущий каталог

Если текущий абсолютный путь требует буфера, длина которого превышает size , то возвращается NULL , а errno принимает значение ERANGE ; приложение должно проверить, возникла эта ошибка или нет и, если необходимо, выделить буфер большего размера.

Если buf равно NULL, то поведение getcwd () становится неопределенным.

Расширение стандарта POSIX.1 для Linux (libc4, libc5, glibc) предусматривает следующее: если при вызове buf равно NULL , getcwd() , то буфер выделяется динамически с помощью функции malloc() . В этом случае выделенный буфер имеет размер size ; если size равно нулю, то выделяется buf необходимого размера. Возможно (и даже рекомендуется) после использования освободить выделенные таким образом буферы с помощью free() .

get_current_dir_name (которая имеет прототип только в том случае, если определено значение _GNU_SOURCE) выделит с помощью malloc (3) массив, достаточно большой для помещения в него имени текущего каталога. Если установлена и имеет правильное значение переменная окружения PWD , то будет возвращено ее значение.

getwd (имеющая прототип только в том случае, если определено значение _BSD_SOURCE или _XOPEN_SOURCE_EXTENDED) не будет выделять память с помощью malloc (3). Аргумент buf должен быть указателем на массив длиной как минимум PATH_MAX байтов. getwd возвращает только первые PATH_MAX байтов реального пути.

getcwd

Эта функция не определена стандартом ANSI C.

Функция getcwd() копирует полный путь (максимум len символов) текущего рабочего каталога диска в строку, на которую указывает параметр dir. Если полный путь длиннее, чем len символов, то возникает ошибка. Функция getcwd() возвращает указатель на dir.

При вызове функции getcwd() с параметром dir, равным NULL, функция getcwd() автоматичес­ки размещает буфер с использованием функции malloc() и возвращает указатель на этот буфер. Можно освободить память, выделенную функцией getcwd(), используя функцию free().

При ошибке функция getcwd() возвращает значение NULL, а переменная errno устанавливается равной ENODEV (устройство не существует), ENOMEM (недостаточно памяти) или ERANGE (ошибка области).

УЧЕБНИК PHP

Работа с каталогами

Для установки текущего каталога применяется функция chdir:

Работать с этой функцией можно следующим образом:

  • chdir («/tmp/data» ); // переход по абсолютному пути
  • chdir («./js» ); // переход в подкаталог текущего каталога
  • chdir («..» ); // переход в родительский каталог
  • chdir

/data» ); // переходим в /home/пользователь/data (для Unix)

Чтобы узнать текущий каталог можно воспользоваться функцией getcwd:

Для того чтобы открыть каталог используется функция opendir, открывающая каталог, заданный параметром path:

После того, как каталог открыт, прочитать его можно функцией readdir:

Эта функция возвращает имена элементов, содержащихся в каталоге. Кроме файлов и папок в каталогах находятся также элементы «.» и «..». Первый элемент указывает на текущий каталог, а второй — на родительский. Текущий каталог, кстати, можно открыть, указав его имя как «.»:

После того, как работа с каталогом закончена, его нужно закрыть. Закрытие каталога выполняется при помощи функции closedir:

Ниже приведен пример, осуществляющий чтение и вывод файлов, находящихся в текущем каталоге.

Заметим, что эта функция возвращает также «.» и «..». Если этого делать не нужно, то исключить эти значения можно следующим образом:

В качестве примера на рассмотренные функции, давайте создадим скрипт, удаляющий все файлы из каталога c:/temp, к которым не было доступа в течение суток. Функция удаления файлов в этом случае вызывается рекурсивно.

Создание каталогов производится с помощью функции mkdir:


Эта функция создает каталог с именем dirname и правами доступа mode. В случае неудачи возвращает false. Права доступа задаются только для каталогов UNIX, поскольку в Windows этот аргумент игнорируется. Ниже приведен пример создания каталога test в директории c:/temp.

Удалить каталог можно с помощью функции rmdir:

Теперь удалим только что созданный каталог /test:

Функция rmdir удаляет только пустые каталоги. Для того чтобы удалять непустые каталоги, давайте напишем функцию и удалим каталог c:/temp со всеми вложенными папками и файлами:

При рекурсивном вызове функции не передавайте в качестве аргументов записи «.» и «..», указывающие на текущий и родительский каталоги, так как в этом случае вы можете потерять ваши данные. Пропускайте эти записи явным образом при помощи условного оператора.

Каталоги

Получение файлов из каталога

Сначала рассмотрим современный способ получения файлов. Он появился в версии PHP 5. Функция scandir() возвращает массив, содержащий имена каталогов и файлов в указанном каталоге.

scandir (адрес, сортировка, контекст)

адрес — абсолютный или относительный адрес каталога

сортировка — определяет, в каком порядке будут находиться файлы в массиве. Принимает значения: SCANDIR_SORT_ASCENDING — в алфавитном порядке (по умолчанию), SCANDIR_SORT_DESCENDING — в алфавитном порядке, но по убыванию, SCANDIR_SORT_NONE — без сортировки

контекст — ресурс контекста. Необязательный параметр.

Указанные константы для сортировки появились, начиная с версии PHP 5.4.0. В предыдущих версиях сортировка указывалась по другому. Любое значение, отличное от нулевого, определяет сортировку по убыванию, а 0 сортировку по возрастанию.

В массиве, который возвращает функция, кроме имён файлов и директорий, всегда есть два значения: «.» и «..». Одна точка означает текущий каталог, а две точки означают родительский каталог.

Для примера создадим в папке со скриптами папку с именем mydirectory. Скопируем в неё несколько файлов. Выведем на страницу список файлов из директории.

Когда получены имена файлов, можно работать с ними. Чтобы отличить файлы от папок, можно использовать функции is_file() и is_dir() , которые описаны в прошлой теме.

В более ранных версиях PHP получение файлов из каталога осуществлялось иначе. Для этого каталог нужно открыть. Это делается при помощи функции opendir() , которая возвращает дескрептор каталога. Используя этот дескрептор, функция readdir() возвращает имя одного файла или каталога. Сначала первый файл, потом следующий и так далее. Когда файлы заканчиваются, функция возвращает false . Чтобы получить все файлы, нужно запустить функцию в цикле, пока она не вернёт false .

Выбор каталога

Часто возникает необходимоть работать с текущим каталогом, то есть с тем, в котором находится скрипт. Для выбора этого каталога не обязательно указывать абсолютный адрес. Можно указать по-другому. Одна точка означает текущую директорию, а две точки означают родительскую директорию. Пример:

Функция getcwd() возвращает адрес текущей директории.

В PHP есть возможность выбрать другой каталог. Для этого используется функция chdir() . При этом указанный каталог становится текущим.

Создание, перемещение и удаление каталога

Функция mkdir() создаёт новый каталог. Возвращает true в случае успеха.

mkdir (адрес, режим доступа, вложенные каталоги, контекст)

адрес — абсолютный или относительньный адрес нового каталога

режим доступа — режим доступа к каталогу. По умолчанию 0777

вложенные каталоги — позволяет создать каталог вместе с вложенным каталогом, в котором также могут быть вложенные каталоги. Общая структура описывается в адресе. Для этого параметру нужно указать true .

контекст — ресурс контекста


Обязателен только первый параметр.

Создадим в текущем каталоге новый каталог. Учитывайте, что в 6 строке текущим был выбран другой каталог.

Для переименования и перемещения директорий применяется функция rename() , которая также используется и для файлов. Она рассмотрена в предыдущей теме.

Функция rmdir() удаляет каталог. При этом он должен быть пустым. Если он не пустой, то сначала нужно переместить или удалить из него все файлы. Функция возвращает true при успешном удалении.

Коприрование материалов сайта возможно только с согласия администрации

Найти текущий каталог и каталог файлов

В Python, какие команды я могу использовать для поиска:

  • текущий каталог (где я находился в терминале при запуске Python script) и
  • Где выполняется файл, который я выполняю?

Чтобы получить полный путь к каталогу, в который содержится файл Python, напишите его в этом файле:

(Обратите внимание, что приведенное выше заклинание не будет работать, если вы уже использовали os.chdir() для изменения текущего рабочего каталога, поскольку значение константы __file__ относится к текущему рабочему каталогу и не изменяется на вызов os.chdir() .)

Чтобы получить текущий рабочий каталог, используйте

Ссылки на документацию для модулей, констант и функций, используемых выше:

  • os и os.path .
  • Постоянная __file__
  • os.path.realpath(path) (возвращает «канонический путь указанного имени файла, исключая любые символические ссылки, встречающиеся в пути» )
  • os.path.dirname(path) (возвращает «имя каталога пути path » )
  • os.getcwd() (возвращает «строку, представляющую текущий рабочий каталог» )
  • os.chdir(path) ( «смените текущий рабочий каталог на path » )

Текущий рабочий каталог: os.getcwd()

А \_\_file\_\_ attribute поможет вам узнать, где находится исполняемый файл. Этот пост SO объясняет все: Как мне получить путь к текущему исполняемому файлу в Python?

Вы можете найти это полезным в качестве ссылки:

1.Чтобы получить полный путь к текущему каталогу

1.Чтобы получить только текущее имя папки каталога

Если вы пытаетесь найти текущий каталог файла, в котором вы сейчас находитесь:

Агностический способ ОС:

Чтобы получить текущую рабочую директорию, используйте Path.cwd() :

Чтобы получить абсолютный путь к вашему файлу скрипта, используйте Path.resolve() :

И чтобы получить путь к каталогу, где находится ваш скрипт, откройте его .parent (рекомендуется вызвать .resolve() до .parent ):

Помните, что __file__ не является надежным в некоторых ситуациях: как мне получить путь к текущему исполняемому файлу в Python? ,

Обратите внимание, что Path.cwd() , Path.resolve() и другие методы Path возвращают объекты пути ( PosixPath в моем случае), а не строки. В Python 3.4 и 3.5 это вызвало некоторую боль, поскольку open встроенная функция могла работать только со строковыми или байтовыми объектами и не поддерживала объекты Path , поэтому вам пришлось преобразовывать объекты Path в строки или использовать Path.open() но последний вариант потребовал от вас изменить старый код:

Как вы видите, open(p) не работает с Python 3.5.


PEP 519 — Добавление протокола файловой системы пути, реализованный в Python 3.6, добавлена поддержка PathLike объектов open функцию, так что теперь вы можете пройти Path объекты для open функции напрямую:

_getcwd, _wgetcwd _getcwd, _wgetcwd

Получает текущий рабочий каталог. Gets the current working directory.

Синтаксис Syntax

Параметры Parameters

двойной buffer
Место хранения пути. Storage location for the path.

maxlen maxlen
Максимальная длина пути в символах: char для _getcwd и wchar_t для _wgetcwd. Maximum length of the path in characters: char for _getcwd and wchar_t for _wgetcwd.

Возвращаемое значение Return Value

Возвращает указатель на буфер. Returns a pointer to buffer. Возвращаемое значение null указывает на ошибку , а для свойства «вывод» установлено значение еномем, указывающее, что недостаточно памяти для выделения maxlen байт (если аргумент null задан как buffer) или ERANGE , указывающее, что длина пути превышает maxlen символов. A NULL return value indicates an error, and errno is set either to ENOMEM, indicating that there is insufficient memory to allocate maxlen bytes (when a NULL argument is given as buffer), or to ERANGE, indicating that the path is longer than maxlen characters. Если maxlen меньше или равно нулю, эта функция вызывает обработчик недопустимого параметра, как описано в разделе Проверка параметров. If maxlen is less than or equal to zero, this function invokes an invalid parameter handler, as described in Parameter Validation.

Дополнительные сведения об этих и других кодах возврата см. в разделе _doserrno, errno, _sys_errlist и _sys_nerr. For more information about these and other return codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

Примечания Remarks

Функция _getcwd возвращает полный путь к текущему рабочему каталогу для диска по умолчанию и сохраняет его в буфере. The _getcwd function gets the full path of the current working directory for the default drive and stores it at buffer. Целочисленный аргумент maxlen задает максимальную длину пути. The integer argument maxlen specifies the maximum length for the path. Если длина пути (включая завершающий символ null) превышает maxlen, возникает ошибка. An error occurs if the length of the path (including the terminating null character) exceeds maxlen. Аргумент buffer может иметь значение NULL. буфер как минимум размера maxlen (только при необходимости) автоматически выделяется с помощью mallocдля хранения пути. The buffer argument can be NULL; a buffer of at least size maxlen (more only if necessary) is automatically allocated, using malloc, to store the path. Этот буфер можно впоследствии освободить, вызвав Free и передав ему возвращаемое значение _getcwd (указатель на выделенный буфер). This buffer can later be freed by calling free and passing it the _getcwd return value (a pointer to the allocated buffer).

_getcwd возвращает строку, представляющую путь к текущему рабочему каталогу. _getcwd returns a string that represents the path of the current working directory. Если текущий рабочий каталог является корнем, строка заканчивается обратной косой чертой ( \ ). If the current working directory is the root, the string ends with a backslash ( \ ). Если текущий рабочий каталог отличается от корневого, строка заканчивается именем каталога, а не обратной косой чертой. If the current working directory is a directory other than the root, the string ends with the directory name and not with a backslash.

_wgetcwd — это версия _getcwdдля расширенных символов; Аргумент буфера и возвращаемое значение _wgetcwd являются строками расширенных символов. _wgetcwd is a wide-character version of _getcwd; the buffer argument and return value of _wgetcwd are wide-character strings. в противном случае _wgetcwd и _getcwd ведут себя одинаково. _wgetcwd and _getcwd behave identically otherwise.

При определении _DEBUG и _CRTDBG_MAP_ALLOC вызовы методов _getcwd и _wgetcwd заменяются вызовами _getcwd_dbg и _wgetcwd_dbg для разрешения отладки выделения памяти. When _DEBUG and _CRTDBG_MAP_ALLOC are defined, calls to _getcwd and _wgetcwd are replaced by calls to _getcwd_dbg and _wgetcwd_dbg to allow for debugging memory allocations. Дополнительные сведения см. в разделе _getcwd_dbg, _wgetcwd_dbg. For more information, see _getcwd_dbg, _wgetcwd_dbg.

Сопоставления подпрограмм обработки обычного текста Generic-Text Routine Mappings

Процедура Tchar.h Tchar.h routine _UNICODE и _MBCS не определены _UNICODE and _MBCS not defined _MBCS определено _MBCS defined _UNICODE определено _UNICODE defined
_tgetcwd _tgetcwd _getcwd _getcwd _getcwd _getcwd _wgetcwd _wgetcwd

Требования Requirements

Подпрограмма Routine Обязательный заголовок Required header
_getcwd _getcwd
_wgetcwd _wgetcwd или or

Дополнительные сведения о совместимости см. в разделе Совместимость. For more compatibility information, see Compatibility.

Функции работы с каталогами (папками)

Работа с файловой системой в PHP

Основные функции работы с файловой системой можно разделить на следующие кате­гории:

· функции работы с каталогами (папками);

· функции доступа к общей информации о файле и файловой системе;

· функции операций над файлом;

· функции работы с временными файлами.

В ка­честве разделителя имен в полном имени каталога или файла в Windows можно использовать как символ обратного слеша «\», так и обычного слеша – «/».


Функции работы с каталогами позволяют:

· создавать и удалять каталоги;

· выделить каталог в полном пути к файлу;

· определить имя текущего каталога;

· изменить текущий каталог;

· выполнить проверки для каталога;

· получить доступ к содержимому каталога.

Для создания и удаления каталога используются функции mkdir() и rmdir().

bool mkdir(string dirname)

создает каталог с указанным именем dirname. Если каталог создан, функция возвращает значение true или, в противном случае, значение false.

bool rmdir(string dirname)

удаляет указанный каталог dirname (каталог должен быть пустым и иметь права на удаление). Если удаление каталога завершается успешно, функция возвращает true, иначе – false.

Для определения имени каталога в полном имени файла используется функция

string dirname(string path)

Она возвращает имя каталога из полного имени файла path.

Определить имя текущего каталога можно с помощью функции

В случае ошибки эта функция возвращает значение false.

Для изменения текущего каталога используется функция

bool chdir(string dirname)

Эта функция выполняет переход из текущего каталога в каталог dirname, который становится текущим каталогом. Если переход в каталог direname завершается успешно, возвращается значение true, иначе – false.

Выполнить проверки для каталога можно с помощью функций is_dir() и file_exists().

bool is_dir(string name)

возвращает true, если параметр name является именем каталога и false – в противном случае.

bool file_exists(string name)

возвращает true, если файл или каталог с именем name существует и false – в противном случае.

Пример 4.6.132. Использование функций dirname(), getcwd(), chdir() и file_exists():

В результате выполнения этого фрагмента программы


// Определение имени каталога

// для файла «Введение.doc»

// Если каталог $newDirName существует

// Вывод имени текущего каталога

print «Current directory: «.getcwd();

// Переход в каталог $newDirName

// Вывод имени нового текущего каталога

print «\nNew current directory: «.getcwd();

будут выведены следующие строки:

Для получения доступа к содержимому каталога можно использовать функции opendir(), readdir(), rewinddir() и closedir(), а также функцию scandir().

int opendir(string dirname)

возвращает дескриптор (целое число) указанного в параметре dirname каталога. Данный дескриптор используется в функциях readdir(), rewinddir(), closedir(). Если указанный каталог доступен – возвращается значение дескриптора, иначе – false.

string readdir(int dir_handle)

возвращает имя очередного элемента каталога (файла или каталога) с дескриптором dir_handle и сдвигает внутренний указатель к следующему элементу (после открытия каталога функцией opendir() внутренний указатель устанавливается на первый элемент каталога). Если каталог не содержит больше элементов, возвраща­ется значение false.

void rewinddir(int dir_handle)

устанавливает внутренний указатель каталога с дескриптором dir_handle в начало для повтор­ного обхода элементов функцией readdir().

void closedir(int dir_handle)

освобождает каталог с дескриптором dir_handle, открытый до этого функцией opendir().

Пример 4.6.133. Использование функций opendir(), readdir() и closedir(), а также функции is_dir():

Следующий фрагмент программы выводит для заданного каталога имена содержащихся в нем элементов и их типы:

// Задание имени каталога

print «Directory \»$UploadsDir\» content:»;

// Вывод имен и типов элементов каталога в цикле

// Получение имени текущего элемента

// Если элементов больше нет

// Вывод имени и типа текущего элемента

echo «\nElement: $elementName Type: «,

Вывод этого фрагмента имеет следующий вид (символом «.» обозначается текущий каталог, а символами «..» – родительский каталог):


array scandir(string dirname, [int sorting_order])

возвращает массив имен файлов и каталогов, содержащихся в каталоге dirname. Параметр sorting_order задает режим сортировки выводимых имен. Если значение этого параметра равно 0 (это значение по умолчанию), то имена файлов выводятся в алфавитном порядке. Если же задано ненулевое значение параметра sorting_order, то имена файлов выводятся в порядке, обратном алфавитному.

Пример 4.6.134. Использование функции scandir():

Следующий фрагмент программы выводит для заданного каталога имена содержащихся в нем элементов (в порядке, обратном алфавитному) и их типы, а также, для каталогов, количество содержащихся в них элементов:

// Задание имени каталога

$UploadsArray = scandir($UploadsDir, 1);

print «Directory \»$UploadsDir\» content:»;

// Вывод имен и типов элементов каталога

// «Uploads» в цикле

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Для студентов недели бывают четные, нечетные и зачетные. 9438 — | 7438 — или читать все.

188.64.174.135 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

Getcwd – имя текущего рабочего каталога

Функция

Получает имя текущего рабочего каталога.

Синтаксис

#include
char *getcwd (char *buf, int buflen);

Прототип

Описание

Функция getcwd получает полное имя маршрута для текущего рабочего каталога (cwd), включая спецификацию устройства, до buflen байт длиной и запоминает его в переменной buf. Если длина полного имени маршрута (включая нулевое окончание) длиннее buflen, вырабатывается ошибка. Если параметр buf имеет значение NULL, буфер длиной n байтов будет выделен вам с помощью malloc. Затем вы можете освободить выделенный буфер, передав значение, полученное функцией getcwd — функции free.

Возвращаемое значение

Функция getcwd возвращает параметр buf, в случае ошибки возвращается значение NULL. Если параметр buf был равен NULL, функция возвращает указатель на выделенный буфер. Кроме того, если произошла ошибка, глобальная переменная errno получает одно из следующих значений:

ENODEV — нет такого устройства.
ENOMEM — не хватает памяти.
ERANGE — результат превышает допустимый порог.

Переносимость

Функция уникальна для DOS.

Пример

int main(void)
<
char buffer[MAXPATH];
getcwd(buffer,MAXPATH);
printf(«Текущая директория: %s\n»,buffer);
return 0;
>


PHP: получить имя текущего каталога

У меня есть функция, которая возвращает текущее имя папки:

Тем не менее, это возвращает то, что $page_name держит, а не папку, в которой я сейчас нахожусь.

Когда я print_r($each_page_name) Я получаю это:

Array ( [0] => [1] => home [2] => kyleport [3] => public_html [4] => inc ) /home/kyleport/public_html/inc

Кто-нибудь может направить меня в правильном направлении, потому что я понятия не имею, где это идет не так �� Спасибо!

В этом случае я хочу, чтобы это отображалось inc

Решение

Вы просто хотите последний элемент массива:

Другие решения

Ты можешь использовать;

Возвращает текущий рабочий каталог в случае успеха, или FALSE на провал.

Как сказано выше, вы должны использовать getcwd() или, в противном случае, ваша функция всегда будет возвращать папку, в которой она находится, вместо текущей директории скрипта.

Вместо взрыва, вы можете использовать basename ;

Эта маленькая строчка кода сделала это для меня.

Я только что получил название папки, которую я искал.

Я исправил свой код:

Вы должны быть в состоянии получить текущий каталог с предопределенной константой

Как мне найти текущий каталог?

Я пытаюсь прочитать файл, который я прочитал ранее успешно. Я читаю это через библиотеку, и я посылаю это как есть в библиотеку (то есть «myfile.txt»). Я знаю, что файл читается из рабочего / текущего каталога.

Я подозреваю, что текущий / рабочий каталог изменился как-то. Как я могу проверить, что является текущим / рабочим каталогом?

4 ответа

Поскольку вы добавили тег Visual-C ++, я собираюсь предложить стандартную функцию Windows, чтобы сделать это. GetCurrentDirectory

Библиотека Boost для файловой системы обеспечивает чистое решение

Используйте _getcwd чтобы получить текущий рабочий каталог.

Вот самый независимый от платформы ответ, который я получил недавно:

Он довольно многословен, но делает именно то, что должен делать, с красивым интерфейсом C ++ (то есть он возвращает строку, а не как долго вы точно? — ( const ) char* ).

Чтобы отключить предупреждения MSVC об устаревании getcwd , вы можете сделать

Илон Маск рекомендует:  Функции net
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL