vb.net遍历指定目录下的所有子目录和文件(栈法,非递归,效率非常高)

liuxxxxbc 2013-05-17 10:37:26
程序采用栈法查看指定目录下和所有子目录下的文件,非递归,运行速度非常快,将所有文件加入到combobox框内。要求一个windows窗口,一个button,一个combobox组合框。本程序是在vb2008下调试运行成功。
窗口代码如下:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim vbFilePath As String = "C:\windows\"
Main(vbFilePath)
End Sub

模块代码如下
Module 遍历目录
Sub Main(ByVal vbFilePath As String)
Dim Stack(0) As String, m, i, n, p As Integer, muluming(0) As String, wenjianming(0) As String
Stack(0) = vbFilePath
m = 1
Do While m > 0
Try
If My.Computer.FileSystem.DirectoryExists(Stack(m - 1)) Then
列目录(Stack(m - 1), muluming, n)
列文件(Stack(m - 1), wenjianming, p)
m -= 1
ReDim Preserve Stack(m + n - 1)
For i = 0 To n - 1
Stack(m) = muluming(i)
m += 1
Next
For i = 0 To p - 1
Form1.ComboBox1.Items.Add(wenjianming(i))
Next
End If
Catch ex As Exception
End Try
Loop
End Sub
Private Sub 列目录(ByVal vbFilePath As String, ByRef muluming() As String, ByRef n As Integer)
n = 0
If My.Computer.FileSystem.DirectoryExists(vbFilePath) Then
' My.Computer.FileSystem.GetDirectories(vbFilePath)
Dim i As Integer = 0
ReDim muluming(i)
For Each foundDirectory As String In My.Computer.FileSystem.GetDirectories(vbFilePath)
ReDim Preserve muluming(i)
muluming(i) = foundDirectory
n += 1
i += 1
Next
End If
End Sub
Private Sub 列文件(ByVal vbFilePath As String, ByRef wenjianming() As String, ByRef n As Integer)
n = 0
If My.Computer.FileSystem.DirectoryExists(vbFilePath) Then
Dim i As Integer = 0
ReDim wenjianming(i)
For Each foundfile In My.Computer.FileSystem.GetFiles(vbFilePath, FileIO.SearchOption.SearchTopLevelOnly, "*.*") '获得指定目录下的文件名
ReDim Preserve wenjianming(i)
wenjianming(i) = foundfile
n += 1
i += 1
Next
End If
End Sub

End Module
...全文
5157 66 打赏 收藏 举报
写回复
用AI写文章
66 条回复
切换为时间正序
请发表友善的回复…
发表回复
lishengyu 2015-02-10
  • 打赏
  • 举报
回复
秀才跟兵的故事
lishengyu 2015-02-10
  • 打赏
  • 举报
回复
chenkejun 2015-01-19
  • 打赏
  • 举报
回复
评论挺有意思。
MeThee 2013-10-14
  • 打赏
  • 举报
回复
引用 62 楼 zhao4zhong1 的回复:
请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。
好像明白了什么。 难怪现在网上很多的VB遍历算法去测试总是会漏掉文件。 dir() fso的都会漏文件。
赵4老师 2013-05-23
  • 打赏
  • 举报
回复
shell "dir /b /a-d c:\*.* >d:\allfile.txt",vbHide '读文件d:\allfile.txt的内容即C:\下所有文件的名字 shell "dir /b /s /a-d c:\*.* >d:\allfiles.txt",vbHide '读文件d:\allfiles.txt的内容即C:\下所有文件的名字(包含子目录) shell "dir /b /ad c:\*.* >d:\alldirs.txt",vbHide '读文件d:\alldirs.txt的内容即C:\下所有子目录的名字 请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。
e4snake 2013-05-22
  • 打赏
  • 举报
回复
现在网上很多资料都是半桶水,别全信。看了自己好好测试一下。
clear_zero 2013-05-21
  • 打赏
  • 举报
回复
引用 53 楼 liuxxxxbc 的回复:
看到大家对这个话题还挺感兴趣,我就把修改后的代码发上来,让大家品评一下,这次我做了两版本的递归和栈的,我实际测试了一下,执行效率没有的太大差异。递归代码编辑简洁明了,运算时实际上是以空间换时间的,如果内存空间不够的话,时间上将明显延长。现在计算机内存明显增大,这个也已经不是问题了,我之所以提出递归慢是因为这个程序的影响,(Public Class Form1 Private vbFilePath As String = "c:\windows\" Private Sub TransFiles(ByVal strDirect As String) If Not (strDirect Is Nothing) Then 'TextBox1.Text = TextBox1.Text + "**********************************" + vbCrLf ' TextBox1.Text = TextBox1.Text + strDirect + vbCrLf Dim mFileInfo As System.IO.FileInfo Dim mDir As System.IO.DirectoryInfo Dim mDirInfo As New System.IO.DirectoryInfo(strDirect) For Each mFileInfo In mDirInfo.GetFiles() ComboBox1.Items.Add(mFileInfo.FullName) ' TextBox1.Text = TextBox1.Text + mFileInfo.FullName + vbCrLf '你可以修改代码添加到你的数组中 Next For Each mDir In mDirInfo.GetDirectories TransFiles(mDir.FullName) Next End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim time1, time2 As Date time1 = Now ComboBox1.Items.Clear() TransFiles(vbFilePath) time2 = Now Label1.Text = (time2 - time1).ToString End Sub End Class )这段程序是网上下载的,我只把可运行的内容改到了,能在我的电脑上运行就行了。其他没动,结果这个软件运行速度惊人的慢!就有了我后来自己编写的上面的那段程序。后来经过网上的讨论,我又把程序进行了修改,现在程序有两种方法可以运行,一种是栈法,一种是递归方法,我把程序加了计时,运行结果两者相差不多。但是前面的代码(也就是网上下载的代码)是递归运算,速度相当慢。有兴趣的朋友可以试试。下面的程序是我改进后的程序递归和栈法都可以运行,效果相差不多。 Private Sub GetFolders(ByVal path As String) '递归 Dim folders(0) As String, i As Integer, wenjian As String i = 0 folders(0) = path wenjian = folders(0) For Each foundDirectory As String In My.Computer.FileSystem.GetDirectories(wenjian) ReDim Preserve folders(i) folders(i) = foundDirectory GetFolders(folders(i)) i += 1 Next GetFiles1(wenjian) End Sub Private Sub GetFiles1(ByVal path As String) For Each foundfile In My.Computer.FileSystem.GetFiles(path, FileIO.SearchOption.SearchTopLevelOnly, "*.*") '获得指定目录下的文件名 ComboBox1.Items.Add(foundfile) Next End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim time1, time2 As Date Dim vbFilePath As String = TextBox1.Text time1 = Now ComboBox1.Items.Clear() GetFolders(vbFilePath) time2 = Now Label1.Text = (time2 - time1).ToString Label3.Text = ComboBox1.Items.Count End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim time1, time2 As Date Dim vbFilePath As String = TextBox1.Text time1 = Now ComboBox2.Items.Clear() Main(vbFilePath) time2 = Now Label2.Text = (time2 - time1).ToString Label4.Text = ComboBox2.Items.Count End Sub Sub Main(ByVal vbFilePath As String) '栈法 Dim Stack(10000) As String, m, n As Integer, wenjian As String Stack(0) = vbFilePath m = 1 Do While m > 0 n = 0 wenjian = Stack(m - 1) GetFiles2(wenjian) For Each foundDirectory As String In My.Computer.FileSystem.GetDirectories(wenjian) If m + n - 1 > Stack.Length Then ReDim Preserve Stack(m + n + 10000) End If Stack(m + n - 1) = foundDirectory n += 1 Next m = m + n - 1 Loop End Sub Private Sub GetFiles2(ByVal path As String) For Each foundfile In My.Computer.FileSystem.GetFiles(path, FileIO.SearchOption.SearchTopLevelOnly, "*.*") '获得指定目录下的文件名 ComboBox2.Items.Add(foundfile) Next End Sub
lz说的运行结果相差不多是什么意思? 两个运行结果肯定要是相同的阿,如果不相同就没有比较继续比较时间了 你写的这个递归就是最普遍的用法,而且你查的路径很简单,怎么会出现特别慢的情况... 就你查的这个路径在我的机器两种方法没有区别的,尤其是用now来做时间差 比较来说后面的代码看起来不整齐而且开大数组,或者多次redim 除去技术讨论不提,实际应用中前面的递归或者直接用库函数比较好
liuxxxxbc 2013-05-21
  • 打赏
  • 举报
回复
引用 54 楼 hpygzhx520 的回复:
不管什么法,这样的写法,我个人是不喜欢的, 讨论递归是一回事情,如果谈实际运用,为什么不用Dim finfo() As System.IO.FileInfo = dir.GetFiles("*", IO.SearchOption.AllDirectories)呢?我还是更相信微软的技术。
Dim Stack(10000) As String 这个是为了检测,频繁使用ReDim Preserve Stack是否对性能有影响,而设定的。原先都是Dim Stack(0) As String这个格式,结果显示效果没有太大区别,对整体性能没有区别。
Tiger_Zhao 2013-05-21
  • 打赏
  • 举报
回复
遍历目录的瓶颈在磁盘操作上,只要不是太烂的代码,对性能的影响不大。
hpygzhx520 2013-05-21
  • 打赏
  • 举报
回复
不管什么法,Dim Stack(10000) As String这样的写法,我个人是不喜欢的, 讨论递归是一回事情,如果谈实际运用,为什么不用Dim finfo() As System.IO.FileInfo = dir.GetFiles("*", IO.SearchOption.AllDirectories)呢?我还是更相信微软的技术。
三楼の郎 2013-05-21
  • 打赏
  • 举报
回复
孔子的一个弟子在扫大街,过来一个人问他:“阁下何人?”孔门弟子道:“我乃孔门弟子!”那人道:“孔夫子博学也!有个问题想请教。”孔门弟子道:“请讲。”那人问:“一年之中有几季?”孔门弟子不假思索:“四季!”那人摇头道:“非也,一年只有三季!”二人遂起争执。孔子出,那人问孔子:“一年有几季?”孔子道:“三季。”那人遂大笑满意而去。弟子不解,问孔子,孔子说:“你没看见那人通体绿色吗?他是只蚱蜢。蚱蜢是夏虫,春天生,秋天死,从未经历过冬季,你跟他讲一年有四季有什么用呢?费尽口舌也不能让他信服啊!” 圣贤的智慧就在这里。 不要喷我,我只是打个酱油路过。
liuxxxxbc 2013-05-21
  • 打赏
  • 举报
回复
看到大家对这个话题还挺感兴趣,我就把修改后的代码发上来,让大家品评一下,这次我做了两版本的递归和栈的,我实际测试了一下,执行效率没有的太大差异。递归代码编辑简洁明了,运算时实际上是以空间换时间的,如果内存空间不够的话,时间上将明显延长。现在计算机内存明显增大,这个也已经不是问题了,我之所以提出递归慢是因为这个程序的影响,(Public Class Form1 Private vbFilePath As String = "c:\windows\" Private Sub TransFiles(ByVal strDirect As String) If Not (strDirect Is Nothing) Then 'TextBox1.Text = TextBox1.Text + "**********************************" + vbCrLf ' TextBox1.Text = TextBox1.Text + strDirect + vbCrLf Dim mFileInfo As System.IO.FileInfo Dim mDir As System.IO.DirectoryInfo Dim mDirInfo As New System.IO.DirectoryInfo(strDirect) For Each mFileInfo In mDirInfo.GetFiles() ComboBox1.Items.Add(mFileInfo.FullName) ' TextBox1.Text = TextBox1.Text + mFileInfo.FullName + vbCrLf '你可以修改代码添加到你的数组中 Next For Each mDir In mDirInfo.GetDirectories TransFiles(mDir.FullName) Next End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim time1, time2 As Date time1 = Now ComboBox1.Items.Clear() TransFiles(vbFilePath) time2 = Now Label1.Text = (time2 - time1).ToString End Sub End Class )这段程序是网上下载的,我只把可运行的内容改到了,能在我的电脑上运行就行了。其他没动,结果这个软件运行速度惊人的慢!就有了我后来自己编写的上面的那段程序。后来经过网上的讨论,我又把程序进行了修改,现在程序有两种方法可以运行,一种是栈法,一种是递归方法,我把程序加了计时,运行结果两者相差不多。但是前面的代码(也就是网上下载的代码)是递归运算,速度相当慢。有兴趣的朋友可以试试。下面的程序是我改进后的程序递归和栈法都可以运行,效果相差不多。 Private Sub GetFolders(ByVal path As String) '递归 Dim folders(0) As String, i As Integer, wenjian As String i = 0 folders(0) = path wenjian = folders(0) For Each foundDirectory As String In My.Computer.FileSystem.GetDirectories(wenjian) ReDim Preserve folders(i) folders(i) = foundDirectory GetFolders(folders(i)) i += 1 Next GetFiles1(wenjian) End Sub Private Sub GetFiles1(ByVal path As String) For Each foundfile In My.Computer.FileSystem.GetFiles(path, FileIO.SearchOption.SearchTopLevelOnly, "*.*") '获得指定目录下的文件名 ComboBox1.Items.Add(foundfile) Next End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim time1, time2 As Date Dim vbFilePath As String = TextBox1.Text time1 = Now ComboBox1.Items.Clear() GetFolders(vbFilePath) time2 = Now Label1.Text = (time2 - time1).ToString Label3.Text = ComboBox1.Items.Count End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim time1, time2 As Date Dim vbFilePath As String = TextBox1.Text time1 = Now ComboBox2.Items.Clear() Main(vbFilePath) time2 = Now Label2.Text = (time2 - time1).ToString Label4.Text = ComboBox2.Items.Count End Sub Sub Main(ByVal vbFilePath As String) '栈法 Dim Stack(10000) As String, m, n As Integer, wenjian As String Stack(0) = vbFilePath m = 1 Do While m > 0 n = 0 wenjian = Stack(m - 1) GetFiles2(wenjian) For Each foundDirectory As String In My.Computer.FileSystem.GetDirectories(wenjian) If m + n - 1 > Stack.Length Then ReDim Preserve Stack(m + n + 10000) End If Stack(m + n - 1) = foundDirectory n += 1 Next m = m + n - 1 Loop End Sub Private Sub GetFiles2(ByVal path As String) For Each foundfile In My.Computer.FileSystem.GetFiles(path, FileIO.SearchOption.SearchTopLevelOnly, "*.*") '获得指定目录下的文件名 ComboBox2.Items.Add(foundfile) Next End Sub
threenewbee 2013-05-21
  • 打赏
  • 举报
回复
引用 52 楼 itakeblue 的回复:
我来说两句啊。 我对这个技术不懂啊,不过除去技术方面的讨论,caozhy版主,你看看你说的,一会“因为你念书太少,才把这些基本概念看得多么高深。”“又是一个没上过学,被培训班和网络误导的少年。 ”。。。 你怎么从别人一两句话就知道别人念书少?就你念的书多是吗? 从你第一个回复“莫名其妙”就可以看出很有中国技术“高手”的味道,国外象stackoverflow上高手多了去了,会有几个象你这样说话嘲讽对方的?人家也只是热心将自己的一些发现和大家分享。 身为版主不但在技术上要过人,修养更是。
没有泛之四海而皆准的道理,你说“我对这个技术不懂啊,不过除去技术方面的讨论……”这就是技术讨论,就是对这件事情来说,怎么能脱离这个语境呢?你提到了stackoverflow,你真的了解stackoverflow的规则么?你知道stackoverflow根本就不像csdn什么帖子都可以发的么?
threenewbee 2013-05-21
  • 打赏
  • 举报
回复
引用 52 楼 itakeblue 的回复:
我来说两句啊。 我对这个技术不懂啊,不过除去技术方面的讨论,caozhy版主,你看看你说的,一会“因为你念书太少,才把这些基本概念看得多么高深。”“又是一个没上过学,被培训班和网络误导的少年。 ”。。。 你怎么从别人一两句话就知道别人念书少?就你念的书多是吗? 从你第一个回复“莫名其妙”就可以看出很有中国技术“高手”的味道,国外象stackoverflow上高手多了去了,会有几个象你这样说话嘲讽对方的?人家也只是热心将自己的一些发现和大家分享。 身为版主不但在技术上要过人,修养更是。
我的意思很简单,我不是不鼓励“创新思考”或者“通过实践去验证真理”,但是对于那些再基本不过的常识,在基础知识都没有学会的情况下,去“创新思考”或者“通过实践去验证真理”是盲目和无谓的。我是很反对民科这种社会现象的,媒体总喜欢鼓动什么中学生发明了什么,农民自己造飞机,小学生挑战什么数学难题,相对论即将被改写之类的,没错,从新闻学的角度看,这些东西确实有新闻价值,但是从科学的角度来说,这纯粹是误导人,是什么大炼钢铁、超声波发热之类运动的遗风。 借用一句话,一些人的问题就是书念得太少,想法太多。
itakeblue 2013-05-21
  • 打赏
  • 举报
回复
我来说两句啊。 我对这个技术不懂啊,不过除去技术方面的讨论,caozhy版主,你看看你说的,一会“因为你念书太少,才把这些基本概念看得多么高深。”“又是一个没上过学,被培训班和网络误导的少年。 ”。。。 你怎么从别人一两句话就知道别人念书少?就你念的书多是吗? 从你第一个回复“莫名其妙”就可以看出很有中国技术“高手”的味道,国外象stackoverflow上高手多了去了,会有几个象你这样说话嘲讽对方的?人家也只是热心将自己的一些发现和大家分享。 身为版主不但在技术上要过人,修养更是。
clear_zero 2013-05-20
  • 打赏
  • 举报
回复
引用 44 楼 hpygzhx520 的回复:
实验检验一下即可,何必喋喋不休,模块就用楼主那坨代码: Public Class Form1 Private Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim timeBegin As Long = GetTickCount() Dim vbFilePath As String = "C:\Windows\SysWOW64" Main(vbFilePath) Me.Text = (GetTickCount() - timeBegin).ToString() End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim timeBegin As Long = GetTickCount() Dim dir As New System.IO.DirectoryInfo("C:\Windows\SysWOW64") Dim finfo() As System.IO.FileInfo = dir.GetFiles("*", IO.SearchOption.AllDirectories) For Each fChild As System.IO.FileInfo In finfo ComboBox1.Items.Add(fChild.ToString()) Next Me.Text = (GetTickCount() - timeBegin).ToString() End Sub End Class 编译Release测试: 在我电脑上,Button1_Click不会低于500,大约530、 Button2_Click不会高于400.大约365
你说是不是.net对于库函数作了优化呢?
三楼の郎 2013-05-20
  • 打赏
  • 举报
回复
hpygzhx520 2013-05-20
  • 打赏
  • 举报
回复
实验检验一下即可,何必喋喋不休,模块就用楼主那坨代码: Public Class Form1 Private Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim timeBegin As Long = GetTickCount() Dim vbFilePath As String = "C:\Windows\SysWOW64" Main(vbFilePath) Me.Text = (GetTickCount() - timeBegin).ToString() End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim timeBegin As Long = GetTickCount() Dim dir As New System.IO.DirectoryInfo("C:\Windows\SysWOW64") Dim finfo() As System.IO.FileInfo = dir.GetFiles("*", IO.SearchOption.AllDirectories) For Each fChild As System.IO.FileInfo In finfo ComboBox1.Items.Add(fChild.ToString()) Next Me.Text = (GetTickCount() - timeBegin).ToString() End Sub End Class 编译Release测试: 在我电脑上,Button1_Click不会低于500,大约530、 Button2_Click不会高于400.大约365
threenewbee 2013-05-20
  • 打赏
  • 举报
回复
引用 41 楼 liuxxxxbc 的回复:
[quote=引用 36 楼 caozhy 的回复:] [quote=引用 35 楼 liuxxxxbc 的回复:] [quote=引用 34 楼 caozhy 的回复:] [quote=引用 33 楼 liuxxxxbc 的回复:] 这个程序的代码有很多地方,是可以更改的,编这个程序的的目的,是要列出指定目录下的文件,可以指定用代码对文件进行操作。之前在网上找了一个递归的代码运行起来好慢,才想到了用栈的方法,不过我这个栈是用数组替代的,方法是用栈的。没想到会得到这么多网友的支持,谢谢了。
引用 33 楼 liuxxxxbc 的回复:
这个程序的代码有很多地方,是可以更改的,编这个程序的的目的,是要列出指定目录下的文件,可以指定用代码对文件进行操作。之前在网上找了一个递归的代码运行起来好慢,才想到了用栈的方法,不过我这个栈是用数组替代的,方法是用栈的。没想到会得到这么多网友的支持,谢谢了。
引用 33 楼 liuxxxxbc 的回复:
这个程序的代码有很多地方,是可以更改的,编这个程序的的目的,是要列出指定目录下的文件,可以指定用代码对文件进行操作。之前在网上找了一个递归的代码运行起来好慢,才想到了用栈的方法,不过我这个栈是用数组替代的,方法是用栈的。没想到会得到这么多网友的支持,谢谢了。
引用 33 楼 liuxxxxbc 的回复:
这个程序的代码有很多地方,是可以更改的,编这个程序的的目的,是要列出指定目录下的文件,可以指定用代码对文件进行操作。之前在网上找了一个递归的代码运行起来好慢,才想到了用栈的方法,不过我这个栈是用数组替代的,方法是用栈的。没想到会得到这么多网友的支持,谢谢了。
如果你想成为一个程序员,应该学会编写代码。记住,代码是人写出来的,所以应该处处可以修改,而不是像填空题那样“有很多地方,是可以更改的”,搞清楚原理,而不是随便找一个代码,并且“感觉很慢”,不能靠猜测,计算机科学是精密和严谨的,不是像国学大师和算命的那样,是个大概和模糊的东西。最后,你根本没有找到最佳实践,.NET FCL比起VB6带的支零破碎的库来说,完善了许多,我说了,只要1行代码就可以解决你这个问题。[/quote] 这里是论坛,不是放的地方,我改也可以不改也可以,懂就是懂,不懂就是不懂,不像有些人,不懂装懂,有意思吗。还当狗屁斑竹,羞羞羞死得了。vb.net都没用过,有什么资格品头论足。还是回家先练练“基本功”。把基础打牢点。如果哪不会,我可以教你。别上外面乱说,让人笑掉大牙。[/quote] 好了,我看你低劣的表演也该收场了吧。[/quote] 我看你的表演也该收场了。什么都不懂,赶快回家把基本功补习一下再来吧!哈哈。栈和递归是编程的最基本算法。你连这个都不懂,还在这个版块当斑竹,太笑话了。哈哈!顺便问一句,你是什么学校毕业的吗? 原本先把改写的程序发一下,让大家品品。我看在斑竹的份上,还是算了吧。[/quote] 呵呵,你以为你耍泼的技术很高明么?
liuxxxxbc 2013-05-20
  • 打赏
  • 举报
回复
引用 40 楼 caozhy 的回复:
[quote=引用 39 楼 liuxxxxbc 的回复:] [quote=引用 37 楼 caozhy 的回复:] 你除了仗着使用一个虚拟的id在这里撒泼耍赖以外,你还能做什么。我想现实中的你恐怕不敢如此放肆地秀你的下限吧。
你能不能闭嘴,有本事,你先把基本理论好好学学。别耍无赖好吗!着不需要你说话![/quote] 那你继续表演。[/quote] 我不用表演,这个舞台还是交给你吧。你愿意说啥就说啥吧。我想看到你长了本事的斑竹,不想看到一个无知的斑竹。谢谢你的宝地。再见了!
加载更多回复(46)
内容概要:本文围绕基于电感电容电流环PI与前馈补偿矩阵构造的跟网型储能变流器,开展dq坐标系下的阻抗理论建模与Simulink仿真对比研究。通过建立储能变流器在dq域的数学模型,设计包含电感电流内环、电容电流中间环和电压外环的多环控制结构,并引入前馈补偿矩阵以提升系统的动态响应能力和稳定性。在此基础上,采用小信号分析法推导系统的输出阻抗模型,构建完整的dq域阻抗理论框架,并利用Simulink平台搭建高保真仿真模型进行频域扫频验证,实现理论建模与仿真结果的精确对比,深入分析控制参数对系统阻抗特性的影响规律,揭示其在抑制并网系统振荡、提升稳定性方面的关键作用,为新能源并网系统的稳定性分析与优化设计提供坚实的理论支撑和技术路径。; 适合人群:具备电力电子、自动控制理论基础,从事新能源发电、储能系统、微电网或电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握跟网型储能变流器在dq域的阻抗建模方法;②理解多环控制与前馈补偿对系统阻抗特性的影响机制;③实现理论阻抗模型与Simulink仿真扫频结果的对比验证,支撑并网稳定性分析。; 阅读建议:学习者应结合控制理论与电力电子变换器知识,重点关注数学推导与仿真建模的一致性,建议动手复现Simulink仿真模型并进行参数敏感性分析,以深化对阻抗重塑机理的理解。
内容概要:本文介绍了基于Matlab实现的基本雷达与干扰机仿真系统,旨在通过代码实践帮助读者深入理解雷达系统的工作原理及其在复杂电磁环境中与干扰机的相互作用机制。内容涵盖雷达信号的发射、传播、目标回波接收、微多普勒效应建模、干扰信号的生成与影响分析等关键环节,结合具体的Matlab代码实现了完整的仿真流程,并提供了详尽的结果可视化与性能评估,重点展示了目标探测、时频特征提取、干扰抑制策略等关键技术的实现方法,有助于掌握雷达系统动态特性与抗干扰能力的分析手段。; 适合人群:具备一定Matlab编程基础,对雷达系统、信号处理、电子对抗或通信工程等领域感兴趣的高校学生、科研人员及工程技术人员。; 使用场景及目标:①学习雷达系统的基本构成与工作流程;②掌握雷达回波信号与典型干扰信号(如噪声干扰、欺骗干扰)的数学建模方法;③通过Matlab仿真深入理解微多普勒特征、时频分析技术(如STFT、小波变换)及干扰抑制算法;④为开展雷达目标识别、抗干扰算法设计或电子战系统仿真等前沿研究奠定实践基础。; 阅读建议:建议读者结合提供的Matlab代码逐段运行并调试,重点关注雷达信号模型、目标运动建模、干扰生成模块及信号处理流程,配合文中仿真结果进行对比分析;同时可延伸学习现代信号处理技术如压缩感知、机器学习在雷达中的应用,以提升综合科研与工程实践能力。
基于星形耦合自均流机制的双三相LLC变换器变频调压与多模式切换控制策略研究(Simulink仿真实现)内容概要:本文研究了一种基于星形耦合自均流机制的双三相LLC变换器,重点探讨其变频调压与多模式切换控制策略,并通过Simulink进行仿真实现。该研究旨在解决双三相LLC变换器在不同工作模式下电流不均衡、电压调节不稳定等问题,通过引入星形耦合结构实现自动均流,提升系统效率与可靠性。文中详细分析了变频控制对谐振变换器输出电压的调节机理,设计了多模式平滑切换策略以适应负载变化,确保系统在轻载、重载及瞬态工况下的高效稳定运行。同时,建立了完整的Simulink仿真模型,验证了所提控制策略在动态响应、稳态精度和抗干扰能力方面的优越性。; 适合人群:从事电力电子与电力传动、新能源变换技术及相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高效率、高可靠性的直流电源系统设计,如电动汽车充电、数据中心供电等;②为多相LLC谐振变换器的均流控制与模式切换提供理论支持和技术方案;③适用于需要高性能电源变换器的工业应用场景,推动先进控制策略在实际系统中的落地应用。; 阅读建议:读者应具备一定的电力电子电路与控制系统基础知识,建议结合Simulink仿真模型同步学习,深入理解控制逻辑的设计细节与参数整定方法,并可通过修改仿真参数验证不同工况下的系统性能,以增强实践理解和创新能力。

1,065

社区成员

发帖
与我相关
我的任务
社区描述
VB 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧