积极答复者
关于文件同时读写问题

问题
-
大家好。最近本人希望实现类似下面这样的功能:
通过网络将接收到的文件数据包经处理后写入本地文件,并当写到一定数据的时候,另一应用程序(如播放器)尝试打开还正在写的本地文件。这里出现的问题是,本人通过FileStream来完成数据的写入,且设置了FileShare为ReadWrite,但另一应用程序就是无法打开该文件(当然若该本地文件被正常Close后,即使文件不完整也是可以打开的)。请问有和办法解决共享读问题?
另外,本人查阅了MSDN,关于FileShare.ReadWrite,提到“允许随后打开文件读取或写入。如果未指定此标志,则文件关闭前,任何打开该文件以进行读取或写入的请求(由此进程或另一进程发出)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。”这里提到的“仍可能需要附加权限才能够访问该文件”的这个附加权限是如何做的?
期待了解该问题的朋友的解答。谢谢!
答案
-
大家好。最近本人希望实现类似下面这样的功能:
通过网络将接收到的文件数据包经处理后写入本地文件,并当写到一定数据的时候,另一应用程序(如播放器)尝试打开还正在写的本地文件。这里出现的问题是,本人通过FileStream来完成数据的写入,且设置了FileShare为ReadWrite,但另一应用程序就是无法打开该文件(当然若该本地文件被正常Close后,即使文件不完整也是可以打开的)。请问有和办法解决共享读问题?
另外,本人查阅了MSDN,关于FileShare.ReadWrite,提到“允许随后打开文件读取或写入。如果未指定此标志,则文件关闭前,任何打开该文件以进行读取或写入的请求(由此进程或另一进程发出)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。”这里提到的“仍可能需要附加权限才能够访问该文件”的这个附加权限是如何做的?
期待了解该问题的朋友的解答。谢谢!
我尝试过提供FileAccessRights为读取程序赋予权限,虽然文件打开了,但是却无法读取。FileStream fs = new FileStream("C:\\test.txt",
FileMode.Open,
System.Security.AccessControl.FileSystemRights.ReadPermissions,
FileShare.Read,1,FileOptions.None);经过MSDN一番查找,找到一个使用SafeFileHandle的例子,但我没尝试,不知是否可行,你可以试试看:
ms-help://MS.MSDNQTR.v90.chs/fxref_mscorlib/html/0f21089b-e73b-2055-aae1-6217b12e53fb.htm
另外,如果跨进程的这种数据共享,我觉得FileMapping更加适合你的场景,
负责写入的调用CreateFileMapping API去创建文件映射,负责读取的使用OpenFileMapping 去打开并读取,
使用FileMapping的方式是进程间通讯的传统做法,尤其适合你这种流式的数据而且量比较大的。
- 已标记为答案 hxinf 2010年9月20日 5:08
全部回复
-
大家好。最近本人希望实现类似下面这样的功能:
通过网络将接收到的文件数据包经处理后写入本地文件,并当写到一定数据的时候,另一应用程序(如播放器)尝试打开还正在写的本地文件。这里出现的问题是,本人通过FileStream来完成数据的写入,且设置了FileShare为ReadWrite,但另一应用程序就是无法打开该文件(当然若该本地文件被正常Close后,即使文件不完整也是可以打开的)。请问有和办法解决共享读问题?
另外,本人查阅了MSDN,关于FileShare.ReadWrite,提到“允许随后打开文件读取或写入。如果未指定此标志,则文件关闭前,任何打开该文件以进行读取或写入的请求(由此进程或另一进程发出)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。”这里提到的“仍可能需要附加权限才能够访问该文件”的这个附加权限是如何做的?
期待了解该问题的朋友的解答。谢谢!
我尝试过提供FileAccessRights为读取程序赋予权限,虽然文件打开了,但是却无法读取。FileStream fs = new FileStream("C:\\test.txt",
FileMode.Open,
System.Security.AccessControl.FileSystemRights.ReadPermissions,
FileShare.Read,1,FileOptions.None);经过MSDN一番查找,找到一个使用SafeFileHandle的例子,但我没尝试,不知是否可行,你可以试试看:
ms-help://MS.MSDNQTR.v90.chs/fxref_mscorlib/html/0f21089b-e73b-2055-aae1-6217b12e53fb.htm
另外,如果跨进程的这种数据共享,我觉得FileMapping更加适合你的场景,
负责写入的调用CreateFileMapping API去创建文件映射,负责读取的使用OpenFileMapping 去打开并读取,
使用FileMapping的方式是进程间通讯的传统做法,尤其适合你这种流式的数据而且量比较大的。
- 已标记为答案 hxinf 2010年9月20日 5:08