首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用C#和SMBLibrary获取文件列表的文件信息

如何利用C#和SMBLibrary获取文件列表的文件信息
EN

Stack Overflow用户
提问于 2022-01-17 19:36:11
回答 1查看 831关注 0票数 1

我试图从共享文件夹中的Excel电子表格列表中获取文件名、上次修改的日期/时间和文件大小等文件信息。我使用了C#和Tal的SMBLibary 1.4.8来完成这个任务。

我需要帮助从'List‘类fileList中获取文件信息。下面是到目前为止正在运行的程序片段。我能够登录SMB服务器并连接到共享文件夹'MPDS。我使用的文件夹有9个Excel电子表格。当我打印出' fileList‘元素计数时,它返回9(日志语句:log.LogInformation(“fileList元素的数量:”+fileList.Count.ToString();))。

我很感激任何人给我帮助或建议。

注意:我用描述替换了代码段的IP和凭证。

代码语言:javascript
复制
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);
        }
    }

}
EN

Stack Overflow用户

回答已采纳

发布于 2022-01-18 19:55:31

在您提供的代码示例中,您已经接近完成了。您只需要检查在fileList中返回的文件,但是需要转换为适当的FileDirectoryInformation类型来获取您正在寻找的文件属性。例如:

代码语言:javascript
复制
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,但是有更高级的技术来生成更好的人类可读性大小(您可以查看库,如人道主义者等)。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70746628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档