C# 使用C访问网络文件共享#
我以前从未这样做过,我所做的所有研究都表明需要用户名/密码。情况是这样的:我正在为我的公司开发一个应用程序,该应用程序需要访问网络上的文件共享。让我们调用该文件共享C# 使用C访问网络文件共享#,c#,http,file-io,.net,fileshare,C#,Http,File Io,.net,Fileshare,我以前从未这样做过,我所做的所有研究都表明需要用户名/密码。情况是这样的:我正在为我的公司开发一个应用程序,该应用程序需要访问网络上的文件共享。让我们调用该文件共享\\server\TPK。我的应用需要从此共享上的文件夹获取文件。在公司网络上处理文件共享是否与处理文件I/O(System.IO)相同?有人能给我一些指导吗?我知道这可能是一个基本问题,对此我深表歉意。一般来说,是的。都一样。正如您所说的,只需使用UNC路径即可。根据应用程序的运行方式,您可能会遇到安全问题,但快速测试应该是: Fi
\\server\TPK
。我的应用需要从此共享上的文件夹获取文件。在公司网络上处理文件共享是否与处理文件I/O(System.IO
)相同?有人能给我一些指导吗?我知道这可能是一个基本问题,对此我深表歉意。一般来说,是的。都一样。正如您所说的,只需使用UNC路径即可。根据应用程序的运行方式,您可能会遇到安全问题,但快速测试应该是:
FileInfo myFile = new FileInfo(@"\\server\TPK\some-file-that-exists.pdf");
bool exists = myFile.Exists;
只要把它指向一个你知道存在的文件,看看它是否找到了它。根据应用程序的配置,您可能必须处理凭据或身份。如果是这种情况,您应该得到一个异常,声明“拒绝访问”或类似的内容。这显然不可能 我必须这样做:
public class SharedLocationConnector : IDisposable
{
char driveLetter;
bool disposed = false;
public char ConnectToLocation(string path, string userName, string pwd)
{
driveLetter = MapShare(path, userName, pwd);
Thread.Sleep(2000); //It takes that much for connection to happen
return driveLetter;
}
private char MapShare(string path, string username, string pwd)
{
char driveLetter = GetAvailableDriveLetter();
string cmdString = "net use " + driveLetter + ": " + path + ((username != string.Empty) ? " /user:" + username + " " + pwd : "");
ManagementClass processClass = new ManagementClass("Win32_Process");
object[] methodArgs = { cmdString, null, null, 0 };
object result = processClass.InvokeMethod("Create", methodArgs);
return driveLetter;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!disposed)
{
//Dispose managed objects. Thre are none.
//Dispose unmanaged objects
if (!String.IsNullOrWhiteSpace(driveLetter.ToString()))
FileUtils.DisconnectSambaShare(driveLetter);
disposed = true;
}
}
~SharedLocationConnector()
{
Dispose(false);
}
public void Disconnect()
{
if (!String.IsNullOrWhiteSpace(driveLetter.ToString()))
DisconnectShare(driveLetter);
}
private void DisconnectShare(char driveLetter)
{
string cmdString = "net use " + driveLetter + ": /DELETE";
ManagementClass processClass = new ManagementClass("Win32_Process");
object[] methodArgs = { cmdString, null, null, 0 };
object result = processClass.InvokeMethod("Create", methodArgs);
}
}
我不需要在这附近做任何事。。。我只是简单地使用普通的
System.IO
来访问共享,正如另一个答案所示。。。我想知道你为什么要实现这么复杂的东西?这难道不需要在代码执行之前预先连接到UNC路径吗?我不知道你所说的预连接是什么意思。。。如果应用程序用于访问共享的服务帐户具有访问权限,那么我认为这不会是一个问题。真的。但我的情况是,服务帐户无法访问共享。用户id和pwd必须从应用程序的配置中传递。在我的情况下,FileInfo
的Exists
属性为true,但当我尝试为同一路径创建File
对象时,我得到了一个AccessDenied异常!好的,现在对我有效了。我假设在打开文件时,如果没有指定,FileAccess将是Read
,但是当我明确指定它时,我可以访问该文件进行读取。