我有两个不同的模块需要访问单个文件(其中一个具有读写访问权限,其他模块仅具有读取权限)。该文件是在其中一个模块中使用以下代码打开的:
FileStream fs1 = new FileStream(@"D:\post.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
问题是第二个模块在尝试使用以下代码打开同一文件时失败:
FileStream fs = new FileStream(@"D:\post.xml", FileMode.Open, FileAccess.Read);
我需要在这里设置一些额外的安全参数吗?
在仅读取文件的FileStream上,需要将其设置为
FileShare.ReadWrite
FileStream fs = new FileStream(@"D:\post.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
否则,原来的FileStream将无法写回它......这只是两个流之间的来回齐射,确保你交回对方需要的东西。
打开第二个
FileStream
时,还需要指定FileShare.Read
,否则会尝试以独占访问方式打开它,并且会失败,因为文件已经打开了
您需要使用filestreamname.Open();和 filestreamname.close();命令当使用 2 个文件流读取/写入同一文件时,因为您无法异步读取和写入文件。