当前位置: 首页 > 编程语言 > C#

获取接收文件的用户名分享

时间:2023-04-10 23:08:10 C#

获取接收文件的用户名我想获取访问文件的用户名(添加,删除,重命名,...)。实际上,我使用filesystemwatcher来监视文件访问,并且我已经激活了目录上的对象访问以通过事件日志获取用户信息。这个解决方案并不完美,因为有很多文件事件并且事件日志消息不是那么详细。写数据只有一个事件id。它用于添加文件、重命名、移动……每次写入数据。此外,我必须交叉检查事件日志消息是否与filesystemwatcher事件匹配。我宁愿更好地处理这件事。所以我花了很多时间谷歌搜索、阅读……我知道在stackoverflow上还有另一篇文章获取打开文件的用户名,但我认为应该有一个可能的解决方案,因为Windows事件可以获取用户名。阅读了几页后,我发现应该有一个使用netapi32.dll的可能解决方案。http://vbcity.com/forums/t/133307.aspx?PageIndex=2上的示例代码对我不起作用。我无法获取fileid,所以我将代码更改为privateulongGetFileIdFromPath(stringfilePath){WinAPI.BY_HANDLE_FILE_INFORMATIONobjectFileInfo=newWinAPI.BY_HANDLE_FILE_INFORMATION();线程.睡眠(200);FileInfofi=newFileInfo(文件路径);FilefiStreamfs=.Open(FileMode.Open,FileAccess.Read,FileShare.Read);WinAPI.GetFileInformationByHandle(fs.Handle,outobjectFileInfo);fs.Close();ulongfileIndex=((ulong)objectFileInfo.FileIndexHigh<<32)+(ulong)objectFileInfo.FileIndexLow;返回文件索引;使用此代码,我能够获取fileid但使用fileid和示例代码我无法获取用户名。从我的上一个程序(2周前)开始-我被要求审核文件(也是用户名)的更改,解决方案是通过filesystemwatcher并在事件发生后->转到Windows的事件日志和buXpath搜索-找到哪个用户操作是执行。以上就是C#学习教程:获取接收文件的用户名共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注—publicstaticEventUnitDisplayEventAndLogInformation(stringfileToSearch,DateTimeactionTime){StringBuildersb=newStringBuilder();conststringqueryString=@"*";EventLogQueryeventsQuery=newEventLogQuery("Security",PathType.LogName,queryString);eventsQuery.ReverseDirection=true;EventLogReaderlogReader=newEventLogReader(eventsQuery);EventUnite=newEventUnit();boolisStop=false;for(EventRecordeventInstance=logReader.ReadEvent();null!=eventInstance;eventInstance=logReader.ReadEvent()){foreach(varVARIABLEineventInstance.Properties)if(VARIABLE.Value.ToString().ToLower().Contains(fileToSearch.ToLower())&&actionTime.ToString("d/M/yyyyHH:mm:ss")==eventInstance.TimeCreated.Value.ToString("d/M/yyyyHH:mm:ss")){foreach(eventInstance.Properties中的变量VARIABLE2)sb.AppendLine(VARIABLE2.Value.ToString());e.Message=sb.ToString();e.User=(eventInstance.Properties.Count>1)?eventInstance.Properties[1].Value.ToString():"n/a";e.File=fileToSearch;是停止=真;休息;}如果(isStop)中断;try{//Console.WriteLine("Description:{0}",eventInstance.FormatDescription());}赶上(异常e2){}}返回e;}本文收集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除,如需转载请注明出处: