В конечном счете я хочу путешествовать через файлы и подкаталоги папки и записать что-то во все файлы, я нахожу, что имеют определенное расширение (.wav в моем случае). когда цикличное выполнение, как я говорю, ли объект я в, является каталогом?
Одним из возможных решений проблемы является копирование отсутствующего кода из проекта Mono. В дне я делал небольшой проект с компактной структурой, и в нем отсутствовало все пространство имен System.XLM. Я просто скопировал всю вещь из Моно в свой проект, составил его и он здорово сработал с минимальными изменениями, iirc.
-121--4716728-Как можно разбить документ на строки в эффективном способе (например, не закольцовывать безумно каждый символ в документе)?
Как, по-вашему, работает встроенный Split
?
Просто повторно примените его в качестве метода расширения.
-121--4126681- Основываясь на вашем упоминании .wav
, я предполагаю, что вы пишете код для Windows (это, кажется, место, где * .wav
файлы наиболее распространены). В этом случае для обхода каталогов используются FindFirstFile
и FindNextFile
. Они используют структуру WIN32 _ FIND _ DATA
, которая имеет элемент dwFileAttributes
, содержащий флаги, указывающие атрибуты файла. Если значение dwAttributes & FILE_ATTRIBUTE_DIRECTORY
не равно нулю, имеется имя каталога.
Размышление о микрооптимизации почти в любом случае является пустой тратой времени и приводит к неправильному мышлению...
-121--2364679-Это может быть глупым вопросом, но почему вас беспокоит микроуправление качеством документа? Я считаю, что если вы используете ImageMagick для преобразования, он будет управлять качеством JPEG для вас для наилучшего эффекта. http://www.php.net/manual/en/intro.imagick.php
-121--942038-Вот как вы это делаете (это все из памяти, так что могут быть ошибки):
void FindFilesRecursively(LPCTSTR lpFolder, LPCTSTR lpFilePattern)
{
TCHAR szFullPattern[MAX_PATH];
WIN32_FIND_DATA FindFileData;
HANDLE hFindFile;
// first we are going to process any subdirectories
PathCombine(szFullPattern, lpFolder, _T("*"));
hFindFile = FindFirstFile(szFullPattern, &FindFileData);
if(hFindFile != INVALID_HANDLE_VALUE)
{
do
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
// found a subdirectory; recurse into it
PathCombine(szFullPattern, lpFolder, FindFileData.cFileName);
FindFilesRecursively(szFullPattern, lpFilePattern);
}
} while(FindNextFile(hFindFile, &FindFileData));
FindClose(hFindFile);
}
// Now we are going to look for the matching files
PathCombine(szFullPattern, lpFolder, lpFilePattern);
hFindFile = FindFirstFile(szFullPattern, &FindFileData);
if(hFindFile != INVALID_HANDLE_VALUE)
{
do
{
if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
// found a file; do something with it
PathCombine(szFullPattern, lpFolder, FindFileData.cFileName);
_tprintf_s(_T("%s\n"), szFullPattern);
}
} while(FindNextFile(hFindFile, &FindFileData));
FindClose(hFindFile);
}
}
Поэтому вы можете вызвать это как
FindFilesRecursively(_T("C:\\WINDOWS"), _T("*.wav"));
, чтобы найти все файлы * .wav в C :\WINDOWS и его подкаталогах.
Технически вам не нужно делать два вызова FindFirstFile (), но я нахожу, что функции сопоставления образцов, предоставляемые корпорацией Майкрософт (то есть StartMatchFileSpec или что-либо подобное), не так способны, как FindFirstFile (). Хотя для «* .wav» это, вероятно, будет хорошо.
opendir и readdir (на Unix), вот пример:
http://opengroup.org/onlinepubs/007908775/xsh/readdir.html
или FindFirstFile на окнах
вы могли также использовать оболочку довольно легко:
find . -name "*.wav"
or
ls **/*.wav (in zsh and newer bashes)