我有以下代码从远程目录获取内容。
$dirHandle = opendir("ssh2.sftp://$sftp/".PATH_OUT);
while (false !== ($file = readdir($dirHandle))) {
// something...
}
现在,问题是,上面的代码在forloop
。当我将$dirHandle = opendir("ssh2.sftp://$sftp/".PNB_PATH_OUT);
放在forloop之外时,它只为第一条记录提供了所需的结果。所以,显然readdir
forloop
不适用于opendir
中的第二条记录。
我怎样才能这样做,我只需要使用$dirHandle = opendir("ssh2.sftp://$sftp/".PATH_OUT);
for(...){
while (false !== ($file = readdir($dirHandle))) {
// something...
}
}
一次并使用该连接超过1次?
必备解决方案
string filename = Path.GetFileName(file.FileName);
file.SaveAs(Server.MapPath("UploadImages/" + filename));
string attachmentPath = Server.MapPath("UploadImages/" + filename);
Attachment inline = new Attachment(attachmentPath);
inline.ContentDisposition.Inline = true;
inline.ContentDisposition.DispositionType = DispositionTypeNames.Inline;
inline.ContentType.Name = Path.GetFileName(attachmentPath);
mail.Attachments.Add(inline);
答案 0 :(得分:0)
你的while循环遍历整个目录,直到没有更多的文件,在这种情况下readdir返回false。因此,任何时候readdir在第一次遍历后被调用,它将返回false,因为它已经在目录的末尾。
您可以在for循环中使用rewinddir()将目录句柄的指针重置为开头。
$dirHandle = opendir("ssh2.sftp://$sftp/".PATH_OUT);
for(...){
rewinddir($dirHandle);
while (false !== ($file = readdir($dirHandle))) {
// something...
}
}
由于sftp流似乎不支持搜索,您应该只存储所需的结果并在while循环后执行for循环。毕竟,你是多次遍历同一个目录。
$dirHandle = opendir("ssh2.sftp://$sftp/".PATH_OUT);
while (false !== ($file = readdir($dirHandle))) {
$files[] = $file;
}
for(...){
// use $files array
}