- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
来自冰岛的问候!
首先,我用谷歌和这里都进行了搜索,但没有结果。
我正在使用 Delphi 进行写作,并且拥有几年的 Delphi 经验(在 Pascal 方面拥有超过 30 年的经验)
这些年来我构建了各种文件实用程序,并在几乎每个此类应用程序中使用了 FindFirst 和 FindNext 功能。今天我正在使用我编写的旧文件实用程序,发现它不能 100% 工作
一切正常,直到目录名称变得有些奇怪,即名称内部有几个句点。故事是我正在安装 Wamp,其中的一些文件夹是用这种奇怪的方法命名的。
As: "c:\wamp\apps\phpmyadmin3.4.5"
"c:\wamp\apps\sqlbuddy1.3.3"
"c:\wamp\apps\webgrind1.0 etc"
当我进行调试时,我发现 Findnext 只是返回错误 18,这与 FindNext 在没有更多文件可查找时返回的错误相同。
我尝试过 FindFirstFile 和 FindNextFile ,结果相同。我正在考虑尝试 API FindNextFileEx,如果这与长文件名有关,但不是那么乐观..
此外,我注意到这些文件夹中的属性不是 16 (hex10),而是 8208 (8192+16),但它与此问题没有任何关系,因为我可以例如屏蔽(AND)带有 $00FF 等的 attr
PROCEDURE TForm_Leit.Finna_Dir (Str_InnDir : STRING);
VAR
S_Rec1 : TSearchRec;
Bo_Buid : BOOLEAN;
BEGIN
.
.
.
//Find Dir part
IF (FindFirst (Str_Inndir+'\*.', faDirectory, S_Rec1) = 0) THEN
REPEAT
Bo_Buid := FALSE;
IF ((S_Rec1.Name = '.') OR (S_Rec1.Name = '..')) THEN
REPEAT
Bo_Buid := FindNext (S_Rec1) <> 0;
UNTIL NOT((S_Rec1.Name = '.') OR (S_Rec1.Name = '..')) OR (Bo_BUid);
IF NOT(Bo_Buid) THEN
Finna_Dir (Str_Inndir+'\'+S_Rec1.Name); //Recursion
UNTIL (FindNext (S_Rec1) <> 0);
END;
最佳答案
您使用的模式 ('\*.'
) 仅与不带句点的文件和目录名称匹配(这也意味着文件没有扩展名)。尝试使用:
IF (FindFirst (Str_Inndir+'\*', ...
详细说明一下,VCL 的“Find..”函数是底层 API 的“Find..”函数的包装器,它并不真正关心您是否要搜索文件或文件夹(“Attr”)您可以传递给 sysutils.FindFirst 的参数是 VCL 提供的功能,VCL 只能通过过滤来影响搜索结果。因此,对于文件或文件夹来说,使用“*.
”模式的结果不会有所不同。如果该模式无法返回包含句点的文件名,那么它也无法返回包含句点的文件夹。
该参数的用法与dir
命令相同。从命令提示符导航到“..\apps”文件夹,如果您发出>dir *.
,您将不会看到列出的问题中的文件夹。
您可以查看并尝试以下示例代码中的不同“模式”,该代码仅使用 API 枚举文件,以了解不同的通配符如何影响搜索结果。
var
Data: TWIN32FindData;
procedure ListFiles(const Path, Pattern: string; List: TStrings);
function IsDot: Boolean;
begin
Result := (string(Data.cFileName) = '.') or (Data.cFileName = '..');
end;
function IsDirectory: Boolean;
begin
Result := Bool(Data.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY);
end;
procedure PutFileName;
begin
if not IsDot then begin
if IsDirectory then
List.Add(Path + '\' + Data.cFileName + ' <dir>')
else
List.Add(Path + '\' + Data.cFileName); //'
end;
end;
var
FindHandle: THandle;
begin
FindHandle := FindFirstFile(PChar(Path + Pattern), Data);
if FindHandle <> INVALID_HANDLE_VALUE then
try
PutFileName;
while FindNextFile(FindHandle, Data) do begin
PutFileName;
if (not IsDot) and IsDirectory then
ListFiles(Path + '\' + Data.cFileName, Pattern, List); //'
end;
finally
windows.FindClose(FindHandle);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
Pattern = '\*';
begin
Memo1.Clear;
ListFiles('..sometestdirectory..', Pattern, Memo1.Lines);
end;
关于Delphi,FindNext 即使有文件夹也返回错误 18,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10275469/
在我的代码中,我使用了 .Find 的两个实例, 结合 .FindNext .众所周知,这很容易出错,不幸的是我也不异常(exception)。然而,这是我能想到的最好的。下面的代码,我去掉了最不相关
我目前对以下代码有疑问。我已经设置了Find值,但 FindNext不断返回错误的行: Set SearchRange = Range("B:B") Set OpenBal = SearchRange
我试图从下到上查找所有值“O”。我不能使用“正常”查找,因为我要去 offset一些值下降和.Find()会再次找到他们。 问题是当我使用 .FindNext在 .Find() 之后与 SearchD
我试图复制代码以查找特定范围内的所有值并在它们旁边的单元格中写入“此处”,但退出循环时遇到问题,它总是错过一次。 任何人都可以向我解释解决方案吗? Sub TestValue() Dim c As R
我一直在尝试制作一个宏来突出显示整个行的日期,如果它们落入特定的日期间隔。我遇到的问题是:当宏找到某个日期时,它会为该日期的整行着色,然后应该使用 .findnext 进入下一个 .find。然而宏在
我有这个代码,它只需要用户的 3 个单词,在 b 中查找单词, c和 d并将值更改为 XXXXXXXXXXXXX . 问题是我得到 unable to get findnext property of
来自冰岛的问候! 首先,我用谷歌和这里都进行了搜索,但没有结果。 我正在使用 Delphi 进行写作,并且拥有几年的 Delphi 经验(在 Pascal 方面拥有超过 30 年的经验) 这些年来我构
使用此代码,我尝试搜索包含逗号字符的列中的单元格,并将其分成 2 个新单元格。 Next 我想删除原始行,但似乎不可能,因为该值用于FindNext操作。 我有什么: Column D C
我正在尝试解析 Excel 2007 中的一份报告。它基本上是一份会计费用异常报告。该报告包含带有每种异常类型标题的部分。有些类型的异常会从报告中删除。我使用 Do While 循环来查找每个标题,如
_findnext() 函数在第二次调用时不工作。这是代码。 int main() { struct _finddata_t ffblk; intptr_t done; chd
你好,如果有任何人可以帮助解决这个问题 我有一组从 1 到多的组(最多 12 行 - 每组后一行)字符串的初始部分重复我不知道它们重复的时间,但每次我需要提取相关的data 是重复字符串之后的所有内容
我有一个 vba 脚本,用于处理一组数据,如下所示。它会选择用户名,在本例中为“管理员”,然后转到另一个电子表格并搜索该用户名。一旦找到它,它就会返回到另一个电子表格并向下移动一个单元格,并在另一个电
例如我有文字: “约翰起床了。约翰去看电影了。约翰洗了手。” 现在我想先找到“John”并做一些事情,然后我想找到下一个“John”并做一些事情,所以我需要使用像findNext()这样的东西,考虑到
例如我有文字: “约翰起床了。约翰去看电影了。约翰洗了手。” 现在我想先找到“John”并做一些事情,然后我想找到下一个“John”并做一些事情,所以我需要使用像findNext()这样的东西,考虑到
如果我搜索字母x前进(按钮 Next ),一切正常,但是一旦我改变方向(按钮 Previous ),就会发生这种情况: QsciScintilla.findFirst()不移动选择。即,第一次按下按钮
我正在尝试使用 BeautifulSoup 抓取网站,但遇到了问题。我正在学习在 python 2.7 中完成的教程,它具有完全相同的代码并且没有任何问题。 import urllib.request
findfirst() 有替代品吗?和 findnext() .我正在使用 microsoft visual c++ 2010 express它不支持这些函数,头文件也不支持 ? 我想用这些函数来计
我正在玩 BeautifulSoup 4,我有这个 html 代码: Giraffe 14 7 我想匹配 之间的两个值在这里标记 14 和 7。 我试过这个: giraff
我有以下用户定义的函数,它试图在一个范围内找到第 n 个非空单元格: Option Explicit Function finn_prioritert_oppgave(nummer As Long)
我有 VBA 代码正在工作并在用户窗体中显示第一个匹配项。 调用搜索时,用户会看到一个用户窗体,焦点在一个 ComboBox 上,它要求用户选择一个选项,然后在 TextBox 中输入搜索词(为方便起
我是一名优秀的程序员,十分优秀!