我试图从共享文件夹中的Excel电子表格列表中获取文件名、上次修改的日期/时间和文件大小等文件信息。我使用了C#和Tal的SMBLibary 1.4.8来完成这个任务。
我需要帮助从'List‘类fileList中获取文件信息。下面是到目前为止正在运行的程序片段。我能够登录SMB服务器并连接到共享文件夹'MPDS。我使用的文件夹有9个Excel电子表格。当我打印出' fileList‘元素计数时,它返回9(日志语句:log.LogInformation(“fileList元素的数量:”+fileList.Count.ToString();))。
我很感激任何人给我帮助或建议。
注意:我用描述替换了代码段的IP和凭证。
var client = new SMB2Client();
bool isConnected = client.Connect(IPAddress.Parse("<IP address>"), SMBTransportType.DirectTCPTransport);
if (isConnected)
{
log.LogInformation("Connected to SMB");
NTStatus status = client.Login("<domain>", "<user ID>", "<password>");
if (status == NTStatus.STATUS_SUCCESS)
{
log.LogInformation("Logged in as username");
string filePath = @"Purchasing Admin\D365\Load Templates\Test Templates\" + cFileName + ".txt";
ISMBFileStore fileStore = client.TreeConnect("MPDS", out status);
status = fileStore.CreateFile(out object directoryHandle, out FileStatus fileStatus, @"Purchasing Admin\D365\Load Templates\Test Templates", AccessMask.GENERIC_READ, FileAttributes.Directory, ShareAccess.Read | ShareAccess.Write, CreateDisposition.FILE_OPEN, CreateOptions.FILE_DIRECTORY_FILE, null);
if (status == NTStatus.STATUS_SUCCESS)
{
status = fileStore.QueryDirectory(out List<QueryDirectoryFileInformation> fileList, directoryHandle, "*.xlsx", FileInformationClass.FileDirectoryInformation);
log.LogInformation("Number of fileList element: " + fileList.Count.ToString());
status = fileStore.CloseFile(directoryHandle);
}
}
}发布于 2022-01-18 19:55:31
在您提供的代码示例中,您已经接近完成了。您只需要检查在fileList中返回的文件,但是需要转换为适当的FileDirectoryInformation类型来获取您正在寻找的文件属性。例如:
if (status == NTStatus.STATUS_SUCCESS)
{
List<QueryDirectoryFileInformation> fileList;
status = fileStore.QueryDirectory(out fileList, directoryHandle, "*", FileInformationClass.FileDirectoryInformation);
status = fileStore.CloseFile(directoryHandle);
//
// Here we are casting each item in the fileList to a FileDirectoryInformation
// type that holds the attributes you are looking for.
//
foreach(FileDirectoryInformation file in fileList)
{
Console.WriteLine($"Filename: {file.FileName}");
Console.WriteLine($"File Size: {file.AllocationSize / 1024}KB");
Console.WriteLine($"Created Date: {file.CreationTime.ToString("f")}");
Console.WriteLine($"Last Modified Date: {file.LastWriteTime.ToString("f")}");
Console.WriteLine();
Console.WriteLine();
}
}请注意,我只是假设您要查找的文件大小是KB,但是有更高级的技术来生成更好的人类可读性大小(您可以查看库,如人道主义者等)。
https://stackoverflow.com/questions/70746628
复制相似问题