您好,在Visual Basic.NET中,是沒有像這樣的文件I/O操作的,一般都是通過System.IO.StreamReader和System.IO.StreamWriter類,System.IO.BinaryReader和System.IO.BinaryWriter類來讀寫文件以及利用My.Computer.FileSystem類讀寫文件,利用System.IO.Filestream類來創(chuàng)建文件,通過引用Microsoft Scripting Runtime來執(zhí)行文件(夾)和驅(qū)動器的特殊操作,常用的是System.IO.StreamReader和System.IO.StreamWriter類。
創(chuàng)新互聯(lián)是一家專業(yè)提供玉泉街道企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為玉泉街道眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
例如說要讀取一個文件,我們可以利用System.IO.StreamReader類編寫一個方法(也就是函數(shù)),但是首先要在當(dāng)前類的開頭添加一個引用,引用名稱:System.IO,添加引用的代碼如下
Imports System.IO
添加引用之后,就在當(dāng)前類的內(nèi)部創(chuàng)建方法:
Private Function ReadFile(ByVal FileURL As String) As String
Dim sr As StreamReader = New StreamReader(FileURL)
ReadFile = sr.ReadToEnd()
sr.Close()
sr = Nothing
End Function
示例說明:
該方法是一個返回String(字符串)數(shù)據(jù)的函數(shù),F(xiàn)ileURL作為參數(shù)是用來存放需要訪問的文件的URL,當(dāng)然,要獲取一個文件的URL,就是利用這一句代碼實現(xiàn)的:
Dim sr As StreamReader = New StreamReader(FileURL)
當(dāng)獲取了URL之后,就要對文件進(jìn)行讀取操作了,然后將讀取的結(jié)果返回給方法:
ReadFile = sr.ReadToEnd()
讀取文件完畢之后,要對文件執(zhí)行關(guān)閉操作:
sr.Close()
當(dāng)然別忘了清理資源:
sr = Nothing
StreamReader類可以從流或文件中讀取字符,在創(chuàng)建StreamREader類的對象時,可以指定一個流對象,也可以指定一個文件URL,創(chuàng)建對象后就可以調(diào)用他的方法,從流中讀取數(shù)據(jù),其常用方法如下:
Peek:返回下一個可用字符,但不使用它。
Read:讀取輸入流中下一個字符或一組字符并移動流或文件指針。
ReadBlock:從當(dāng)前流中讀取最大數(shù)量字符并從index開始將數(shù)據(jù)寫入buffer。
ReadLine:從當(dāng)前流中讀取一行字符并將字符作為String返回。
REadToEnd:從流的當(dāng)前位置到末尾讀取流。
Close:關(guān)閉打開的對象,釋放資源。
注:流,一種新的數(shù)據(jù)格式,這種格式可通過System.IO命名空間下的類訪問。流用Stream類表示,所有的流都是從這個類中繼承的。流向用戶提供了一個一般的數(shù)據(jù)視圖,隱藏了操作系統(tǒng)和底層設(shè)備的實現(xiàn)細(xì)節(jié),所有的流都支持讀寫操作。在打開文件時將返回對應(yīng)的流對象,用戶可以對流對象進(jìn)行讀寫操作。
如果要對文件執(zhí)行按行讀取操作,這時就會用到枚舉,這時候,代碼就要更改一下了:
Private Function ReadFile(ByVal FileURL As String) As String
Dim sr As StreamReader = New StreamReader(FileURL)
For Each fLine As String In sr.ReadToEnd()
Line = sr.ReadLine()
ReadFile = ReadFile fLine
Next sr.ReadLine
sr.Close()
End Function
示例說明:
For Each…Next:派生于For…Next循環(huán),用于枚舉一系列對象中的成員,而這些對象組成集合,如果集合中至少存在一個元素,程序就會靜茹For Each塊執(zhí)行。其格式如下:
For Each 元素 [As 數(shù)據(jù)類型] In 元素集合
[循環(huán)體]
[Exit For]
[循環(huán)體]
Next [元素]
比如:
Dim CountNumber As ULong = 0
Dim FolderName() As String = New String() {" "}
For Each strFolder As String In My.Computer.FileSystem.GetDirectories("C:\")
CountNumber = CountNumber + 1
ReDim Preserve FolderName(1 To CountNumber)
FolderName = strFolder
Next strFolder
注:My.Computer.FileSystem.GetDirectories:主要用來枚舉指定目錄的子文件夾。
Preserve:主要用來避免重定義數(shù)組而不損失數(shù)組元素的原有數(shù)據(jù)。
另外,利用My.Computer.FileSystem也可以實現(xiàn)文件的讀取,其代碼如下:
Dim fpReader As String = My.Computer.FileSystem.ReadAllText("C:\test.txt")
示例說明:
定義一個字符串變量利用My.Computer.FileSystem.ReadAllText來實現(xiàn)對“C:\test.txt”的讀取。
如果是已經(jīng)編碼的文本,則可以使用My.Computer.FileSystem對象中的ReadAllText方法并提供路徑和文件編碼類型,將文本寫入字符串變量中,例如:
Dim fpReader As String = My.Computer.FileSystem.ReadAllText("C:\test.txt", _
System.Text.Encoding.UTF32)
當(dāng)然,System.Text.Encoding的成員不止一個,它還有如下成員:
System.Text.Encoding.UTF8
System.Text.Encoding.UTF16
System.Text.Encoding.ASCII
System.Text.Encoding.Unicode
這些是常見的成員,也是主要的成員。
另外,利用My.Computer.Filesystem類無法實現(xiàn)文件的行操作,還有,如果您的計算機(jī)未安裝完整的Microsoft.NET Framework Runtime,則無法實現(xiàn)這種操作!
寫入文件的操作同樣簡單,Visual Basic.NET 允許用戶使用StreamWriter來對文件寫入內(nèi)容,下面就讓我們來創(chuàng)建一個子例程,來實現(xiàn)文件的寫入:
Private Sub WriterFile(ByVal FileURL As String, ByVal FileCon As String)
Dim sr As StreamWriter = New StreamWriter(FileURL)
sr.Write(FileCon)
sr.Close()
sr = Nothing
End Sub
示例說明:
sr.Write(FileCon):將FileCon寫入文件FileURL之中。
另外,StreamWriter常用方法如下:
WriteLine:向流中寫入一行,后面跟結(jié)束符。
Write:寫入流,向流對象中寫入字符并移動流或文件指針。
Close:關(guān)閉打開的對象,釋放資源。
附:Visual Basic 6.0文件操作解說:
打開: Open 文件名 For Input | Output | Append As [#]文件號
Input打開讀入,文件不存在報錯。Output打開覆蓋寫入,文件不存在則創(chuàng)建。Append打 開追加寫入,文件不存在則創(chuàng)建。
讀: Line Input #文件號, 字符串變量
讀一行數(shù)據(jù)存入字符串變量,數(shù)據(jù)包括空格、Tab、等,不包括回車符和換行符,所以要顯示文件的換行效果,要手動添加回車符和換行符(vbCrLf)
Input #文件號, 變量1[, | ;] [變量2]...
這種方式可以存入多個變量,而且變量類型不限于字符串型。
寫: Print #文件號, 參數(shù)1[, | ;] [參數(shù)2]...
將各參數(shù)逐個寫入文件。參數(shù)間用逗號隔開時,文件中相應(yīng)插入多個空格;用分號隔開時,插入一個空格??梢杂肧pc(n)、Tab(n)等進(jìn)行排版。
Write #文件號, 參數(shù)1[, | ;] [參數(shù)2]...
這種寫入方式將自動添加界定符,對不同參數(shù)的類型加以界定。
Visual Basic 6.0文件操作函數(shù):
Seek: Seek(文件號)
返回文件正在訪問的位置,返回值為長整型。對順序文件和二進(jìn)制文件,返回值以字節(jié)為單位;對隨機(jī)訪問文件,返回值以記錄號為單位。
Seek: Seek [#]文件號,位置
定位文件到指定位置。位置單位同上所述。
Input: Input (字節(jié)數(shù),[#]文件號)
從文件的訪問當(dāng)前位置讀入指定字節(jié)數(shù)的數(shù)據(jù)。僅適用于順序文件和二進(jìn)制文件。
EOF: EOF(文件號)
判斷文件的訪問位置是否在文件尾,如果是,返回True,否則,返回False。
LOF: LOF(文件號)
返回文件長度,單位為字節(jié)。
FileLen: FileLen (文件名)
返回文件名對應(yīng)文件的長度,單位是字節(jié)。該函數(shù)取磁盤文件標(biāo)識中的長度,即文件打開前的長度,可以取未打開的文件長度。
GetAttr: GetAttr (Pathname)
返回指定文件或文件夾的屬性。
FileAttr: FileAttr (文件號)
返回文件號對應(yīng)文件的打開方式。
GetDateTime: GetDateTime (Pathname)
返回文件被創(chuàng)建或修改的最后日期和時間。
Free: FreeFile[(0|1)]
返回未被占用的文件號,F(xiàn)ree或Free(0)返回1~255之間未占用的文件號,F(xiàn)ree(1)返回256~511之間未占用的文件。
Dir: Dir (Pathname [,Attributes])
測試指定路徑是否有某文件,Attributes附加文件屬性條件,取值vbNormal、vbReadOnly、vbHidden、vbSystem、vbVolume、vbDirectory。
Kill: Kill (文件名)
刪除指定文件,文件名可包含路徑。
FileCopy: FileCopy 源文件,目標(biāo)文件
拷貝文件。
Name: Name 舊文件名 As 新文件名
文件重命名。前后路徑不一致時,操作為移動文件并重命名。
MkDir: MkDir path
新建文件夾。
RmDir: Rmdir path
刪除文件夾。
ChDrive: ChDrive Drive
改變當(dāng)前驅(qū)動器 ChDrive "D"
CurDir: CurDir [(driver)]
返回當(dāng)前工作路徑,指定driver則返回目標(biāo)驅(qū)動器的當(dāng)前工作路徑。
舉例:
'新建文件,并寫入數(shù)據(jù),關(guān)閉
Open "a.txt" For Output As #1
Print #1, "ABCDEFG"; vbCrLf; "HIJK"
Close #1
'打開文件,并全部寫入新文件,關(guān)閉
Open "a.txt" For Input As #2
Open "b.txt" For Output As #3
Dim str As String
While (Not EOF(2))
Line Input #2, str
Print #3, str
Wend
Close
注:關(guān)于Visual Basic 6.0的文件操作資料來自于
如果您覺得我的回答幫助了您解決難題,別忘了采納哦,如果我的回答未能解決您的問題,您可以在互聯(lián)網(wǎng)上尋找更多的解決方案!
有個currentplayerlist屬性呀,但是好像沒有什么用... 還有一個方法,就是通過PlayStateChange事件來處理 首先要有三個窗體級變量: urls() As String nowplayindex As Integer forend As Boolean 然后在urls中存一個歌曲的路徑,在AxWindowsMediaPlayer1_PlayStateChange中加入以下內(nèi)容: If e.newstate = 1 Then If forend = False Then If nowplayindex + 1 = urls.Count Then nowplayindex = 0 AxWindowsMediaPlayer1.URL = urls(0) AxWindowsMediaPlayer1.Ctlcontrols.currentPosition = 0 AxWindowsMediaPlayer1.Ctlcontrols.play() forend = True Else AxWindowsMediaPlayer1.URL = urlss(nowplayindex + 1) AxWindowsMediaPlayer1.Ctlcontrols.currentPosition = 0 AxWindowsMediaPlayer1.Ctlcontrols.play() nowplayindex += 1 forend = True End If End If End If 上面的代碼實現(xiàn)了順序播放和循環(huán)播放 教你一個方法,可以獲取到mp3、wma的歌曲屬性 Object.Text = AxWindowsMediaPlayer1.currentMedia.getItemInfo(InfoName) InfoName可以填下面的字符串,如TextBox1.Text = AxWindowsMediaPlayer1.currentMedia.getItemInfo("Title") '獲取MP3的唱片標(biāo)題 Abstract、Description = 備注 Author、Artist = 藝術(shù)家 AverageLevel = 平均等級? Bitrate = 比特率 Copyright = 版權(quán) CurrentBitrate = 現(xiàn)在的比特率? Duration = 總時間(秒) FileSize = 文件大小 FileType = 文件類型(其實就是擴(kuò)展名) Is_Protected = 是否受保護(hù) Is_Trusted = 是否受托管? IsVBR = 應(yīng)該是是否存在可變比特率 MediaType = 媒體類型 SourceURL = 原文件路徑 Streams = 文件流? Title = 唱片標(biāo)題 Type = 類型 WM/AlbumArtist = 專輯藝術(shù)家 WM/AlbumTitle、Album = 專輯 WM/Genre、Genre = 流派 WM/GenreID = 流派編號? WM/Lyrics = 歌詞 WM/PromotionURL = 升級地址? WM/Track = 音軌 WM/TrackNumber = 曲目編號 WMFSDKNeeded = 必須的軟件版本版本 WMFSDKVersion = 軟件版本 WM/Year = 年代 WMServerVersion = 服務(wù)器版本? 多教樓主一個信息,是不是要多給點分? 還有,我想問一下,怎么播放avi文件呀? QQ 626808803
這個問題有點意思,但題主表意不明,確切的說應(yīng)該分Web端和客戶端兩種情況。
想來問到這個問題的不應(yīng)該是開發(fā)Web端的,說說客戶端的吧:
1、HttpWebRequest.CookieContainer
Cookies通過HttpResponse傳給客戶端,通過HttpRequest傳回服務(wù)端,因此你可以
設(shè)置Response.Cookies集合的值修改Cookie
Response.Cookies("MyCookie")("Data")?=?myCookie
通過讀取Request.Cookies集合的值得到Cookies的值
myCookie?=Request.Cookies("MyCookie")("Data")??"br"
2、本人自編的一個函數(shù),放到一個模塊里直接調(diào)用即可:
Dim?myCookie?As?String
Public?Function?LoginAnGetCookie(ByRef?sUser?As?String,?ByRef?sPass?As?String)?As?String()
On?Error?Resume?Next
REM?登錄網(wǎng)站并獲得cookie
Dim?url?As?String?=?"網(wǎng)站地址"
Dim?postData?As?String?=?"sUser="??sUser??"sPass="??sPass?'假設(shè)傳值的是這樣的,實際中可用Fiddler抓取。
Dim?wc?As?System.Net.WebClient?=?New?System.Net.WebClient
Rem?wc.Headers.Add("Cookie",?myCookie)??'可講第一次獲得的Cookie賦值給myCookie,然后在此處傳值給網(wǎng)站即可
wc.Headers.Add("Content-Type",?"application/x-www-form-urlencoded")
wc.Headers.Add("UserAgent",?"Mozilla/5.0(iPad;?U;?CPU?iPhone?OS?3_2?like?Mac?OS?X;?en-us)?AppleWebKit/531.21.10?(KHTML,?like?Gecko)?Version/4.0.4?Mobile/7B314?Safari/531.21.10)")
Dim?sHtml?As?String?=?wc.UploadString(url,?"POST",?postData)
Dim?arrAllKeys()?As?String?=?wc.ResponseHeaders.AllKeys
Dim?sCookies?As?String?=?"Set-Cookie"
For?i?As?Integer?=?0?To?arrAllKeys.Length?-?1
If?arrAllKeys(i).Equals("Set-Cookie")?Then?sCookies?=?wc.ResponseHeaders.Get(i)
Next?i
Return?New?String()?{sHtml,?sCookies}?'返回二維數(shù)組,其中LoginAnGetCookie(0)是網(wǎng)頁源代碼,LoginAnGetCookie(1)是登錄后的Cookie
End?Function
要使用GetPixel函數(shù)來取得像素的顏色值,代碼如下:
1
2
3
4
5
private void button1_Click(object sender, EventArgs e)
{
Color color = new Bitmap(pictureBox1.Image).GetPixel(10, 10);
MessageBox.Show(color.ToString());
從MP3中提取歌曲信息
一首MP3歌曲除了音樂信息外,還包含了如歌名、演唱者等信息,當(dāng)我們用winamp軟件聽音樂時,播放清單就自動將這些信息讀出來。大部分人都喜歡從網(wǎng)上下載音樂,但下載下來的MP3文件名都是文件上傳系統(tǒng)自動取名的,和歌曲本身根本不相符,所以,給用戶帶來了很大的麻煩。但是,懶人有懶人的做法,我們何不自己寫一個程序,將歌曲信息自動讀出來并為MP3文件自動更名呢?
下面以C#為工具,把開發(fā)過程寫出來。
一首MP3的額外信息存放在文件的最后面,共占128個字節(jié),其中包括以下的內(nèi)容(我們定義一個結(jié)構(gòu)說明):
public struct Mp3Info
{
public string identify;//TAG,三個字節(jié)
public string Title;//歌曲名,30個字節(jié)
public string Artist;//歌手名,30個字節(jié)
public string Album;//所屬唱片,30個字節(jié)
public string Year;//年,4個字符
public string Comment;//注釋,28個字節(jié)
public char reserved1;//保留位,一個字節(jié)
public char reserved2;//保留位,一個字節(jié)
public char reserved3;//保留位,一個字節(jié)
}
所以,我們只要把MP3文件的最后128個字節(jié)分段讀出來并保存到該結(jié)構(gòu)里就可以了。函數(shù)定義如下:
///
/// 獲取MP3文件最后128個字節(jié)
///
/// 文件名
/// 返回字節(jié)數(shù)組
private byte[] getLast128(string FileName)
{
FileStream fs = new FileStream(FileName,FileMode.Open,FileAccess.Read);
Stream stream = fs;
stream.Seek(-128,SeekOrigin.End);
const int seekPos = 128;
int rl = 0;
byte[] Info = new byte[seekPos];
rl = stream.Read(Info,0,seekPos);
fs.Close();
stream.Close();
return Info;
}
再對上面返回的字節(jié)數(shù)組分段取出,并保存到Mp3Info結(jié)構(gòu)中返回。
///
/// 獲取MP3歌曲的相關(guān)信息
///
/// 從MP3文件中截取的二進(jìn)制信息
/// 返回一個Mp3Info結(jié)構(gòu)
private Mp3Info getMp3Info(byte[] Info)
{
Mp3Info mp3Info = new Mp3Info();
string str = null;
int i;
int position = 0;//循環(huán)的起始值
int currentIndex = 0;//Info的當(dāng)前索引值
//獲取TAG標(biāo)識
for(i = currentIndex;i
{
str = str+(char)Info[i];
position++;
}
currentIndex = position;
mp3Info.identify = str;
//獲取歌名
str = null;
byte[] bytTitle = new byte[30];//將歌名部分讀到一個單獨的數(shù)組中
int j = 0;
for(i = currentIndex;i
{
bytTitle[j] = Info[i];
position++;
j++;
}
currentIndex = position;
mp3Info.Title = this.byteToString(bytTitle);
//獲取歌手名
str = null;
j = 0;
byte[] bytArtist = new byte[30];//將歌手名部分讀到一個單獨的數(shù)組中
for(i = currentIndex;i
{
bytArtist[j] = Info[i];
position++;
j++;
}
currentIndex = position;
mp3Info.Artist = this.byteToString(bytArtist);
//獲取唱片名
str = null;
j = 0;
byte[] bytAlbum = new byte[30];//將唱片名部分讀到一個單獨的數(shù)組中
for(i = currentIndex;i
{
bytAlbum[j] = Info[i];
position++;
j++;
}
currentIndex = position;
mp3Info.Album = this.byteToString(bytAlbum);
//獲取年
str = null;
j = 0;
byte[] bytYear = new byte[4];//將年部分讀到一個單獨的數(shù)組中
for(i = currentIndex;i
{
bytYear[j] = Info[i];
position++;
j++;
}
currentIndex = position;
mp3Info.Year = this.byteToString(bytYear);
//獲取注釋
str = null;
j = 0;
byte[] bytComment = new byte[28];//將注釋部分讀到一個單獨的數(shù)組中
for(i = currentIndex;i
{
bytComment[j] = Info[i];
position++;
j++;
}
currentIndex = position;
mp3Info.Comment = this.byteToString(bytComment);
//以下獲取保留位
mp3Info.reserved1 = (char)Info[++position];
mp3Info.reserved2 = (char)Info[++position];
mp3Info.reserved3 = (char)Info[++position];
return mp3Info;
}
上面程序用到下面的方法:
///
/// 將字節(jié)數(shù)組轉(zhuǎn)換成字符串
///
/// 字節(jié)數(shù)組
/// 返回轉(zhuǎn)換后的字符串
private string byteToString(byte[] b)
{
Encoding enc = Encoding.GetEncoding("GB2312");
string str = enc.GetString(b);
str = str.Substring(0,str.IndexOf('\0') = 0 ? str.IndexOf('\0') : str.Length);//去掉無用字符
return str;
}
改名怎么辦呢?我們按(演唱者)歌名 的格式對歌曲進(jìn)行改名,程序如下:
///
/// 更改文件名
///
/// 文件名
///
private bool ReName(string filePath)
{
if(File.Exists(filePath))
{
Mp3Info mp3Info = new Mp3Info();
mp3Info = this.getMp3Info(this.getLast128(filePath));//讀出文件信息
mp3Info.Artist = this.DeleteNotValue(mp3Info.Artist);
mp3Info.Title = this.DeleteNotValue(mp3Info.Title);
if(mp3Info.Artist.Trim().Length==0)
{
mp3Info.Artist="未命名";
}
if(mp3Info.Title.Trim().Length==0)
{
mp3Info.Title="未知名歌曲";
}
try
{
//更名
File.Move(filePath,filePath.Substring(0,filePath.ToLower().LastIndexOf("\\")).Trim() + "\\" + "(" + mp3Info.Artist.Trim() + ")" +mp3Info.Title.Trim() + ".mp3");
return true;
}
catch(Exception)
{
return false;
}
}
else
{
return false;
}
}