我是SMB1.0/SMB2.0的新手,正在尝试使用https://github.com/TalAloni/SMBLibrary创建一个C#类库来封装基本的文件/目录操作,如复制、读取所有文本、删除等。
我的问题是:
- System.IO.File是否已经封装了SMB1.0/SMB2.0协议,并且我是否不需要使用第三方SMBLibrary?
1.我编写了以下代码将文件从一个SMB共享移动到另一个SMB共享,但它只重命名文件,而不将文件从源位置移动到目标位置。
public bool Move(string sourceFilePath, string targetFilePath)
{
if (!CheckLoggedIn())
{
return false;
}
object fileHandle = null;
_status = _store.CreateFile(out fileHandle,
out FileStatus _,
sourceFilePath,
AccessMask.GENERIC_ALL | AccessMask.SYNCHRONIZE,
FileAttributes.Normal,
ShareAccess.Write,
CreateDisposition.FILE_OPEN,
CreateOptions.FILE_NON_DIRECTORY_FILE | CreateOptions.FILE_SYNCHRONOUS_IO_ALERT,
null);
if (_status == NTStatus.STATUS_SUCCESS)
{
_status = _store.SetFileInformation(fileHandle, new FileRenameInformationType2()
{
FileName = targetFilePath
});
_status = _store.CloseFile(fileHandle);
}
return _status == NTStatus.STATUS_SUCCESS;
}
2条答案
按热度按时间eanckbw91#
1.不,System.IO不包含SMB 1.0或SMB 2.0客户端。
1.为了将文件从一个共享移动到另一个共享,客户端必须从源共享读取文件的内容,然后将其内容写入第二个共享。必须以这种方式复制文件(然后从源中删除)。
zvms9eto2#
我找到了EzSmbhttps://github.com/ume05rw/EzSmb库,您可以使用以下代码在同一SMB共享中移动文件: