none
關於剪貼簿 的小問題 RRS feed

  • 問題

  • 請問各位前輩們...

    我想要從文字檔案 內讀取 文字

    我知道 如果全部讀取 可以用這樣方式去作


            Clipboard.SetText(My.Computer.FileSystem.ReadAllText("C:\2 cmp.txt"))
    
    但我如果想要 一行一行讀取 並且 複製貼上


    如果我寫成這樣子

           
            Dim fr As Stream = File.OpenRead("C:\2 cmp.txt")
            Dim frs As StreamReader = New StreamReader(fr)
     Do While frs.EndOfStream = False
    
                Clipboard.SetText(frs.ReadLine())
                Clipboard.GetText()
            Loop
    

    則在 複製那行指令就會出錯
    出錯訊息為  "要求剪貼簿作業失敗"

    但如果 把迴圈拿掉又可以正常的跑...
    2010年2月17日 上午 10:52

解答

  •         Using sr As StreamReader = File.OpenText("d:\2.txt")
                Dim input As String
                input = sr.ReadLine()
                While Not input Is Nothing
                    If input <> "" Then
                        Clipboard.SetText(input)
                        Clipboard.GetText()
                    End If
    
                    input = sr.ReadLine()
                End While
                sr.Close()
            End Using

    HOW TO:從檔案讀取文字

    應該是設定空字串,造成錯誤吧...
    • 已標示為解答 白楓林 2010年2月20日 上午 03:16
    2010年2月17日 下午 02:33
  •                 If line <> Nothing Then
                        Clipboard.Clear()
                        Clipboard.SetText(line)
                        Clipboard.GetText()
                    End If

    Clipboard.SetText Method (String, TextDataFormat)

    The Clipboard class can only be used in threads set to single thread apartment (STA) mode. To use this class, ensure that your Main method is marked with the STAThreadAttribute attribute.

    專案可以放在網路空間嗎?無法重現相同的錯誤訊息,在下是用VB2008 SP1,是否有別的程式執行緒同時存取剪貼簿,造成錯誤...

    • 已標示為解答 白楓林 2010年2月20日 上午 03:16
    2010年2月18日 上午 02:56
  • 我這裡也沒辦法重現錯誤
    我想你可以直接進偵錯模式,在出現錯誤的時候去看ReadLine()讀取到的是什麼
    • 已標示為解答 白楓林 2010年2月20日 上午 03:16
    • 已取消標示為解答 白楓林 2010年2月20日 上午 03:16
    • 已標示為解答 白楓林 2010年2月20日 上午 03:16
    2010年2月18日 下午 01:17
  • 剪貼簿允許你取出前做檢查,你可以先檢查再取出。

    你無法預期會不會有其他程式動剪貼簿,比如說 FlashGet ...


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 白楓林 2010年2月20日 上午 03:16
    2010年2月18日 下午 02:51

所有回覆

  •         Using sr As StreamReader = File.OpenText("d:\2.txt")
                Dim input As String
                input = sr.ReadLine()
                While Not input Is Nothing
                    If input <> "" Then
                        Clipboard.SetText(input)
                        Clipboard.GetText()
                    End If
    
                    input = sr.ReadLine()
                End While
                sr.Close()
            End Using

    HOW TO:從檔案讀取文字

    應該是設定空字串,造成錯誤吧...
    • 已標示為解答 白楓林 2010年2月20日 上午 03:16
    2010年2月17日 下午 02:33
  • 前輩你好

    我剛剛用你的 程式碼 直接下去 測試
    也是會得到...錯誤
    且只讀取到第二行就出錯

    然後我用MSDN 範例
    如下
            Using sr As StreamReader = New StreamReader("C:\2cmp.txt")
                Dim line As String
                ' Read and display the lines from the file until the end 
                ' of the file is reached.
                Do
                    line = sr.ReadLine()
                    'Console.WriteLine(line)
                    Clipboard.SetText(line)
                    '   Clipboard.GetText()
                Loop Until line Is Nothing
                sr.Close()
            End Using

    把gettext 拿掉可大約讀取 30 行上下
    但是如果把gettext 加上去 不會超過10 行就會出錯...

    2010年2月17日 下午 02:56
  • 錯誤訊息是什麼呢?可以把文字檔上傳到如Sky Drive等網路空間嗎...
    2010年2月18日 上午 12:01
  • 錯誤訊息 還是跟我一開始述說的那個一樣

    至於文件檔 點下去之後 可以全選複製



    是否剪貼簿內 有限制?
    我有打開 內建的 剪貼簿檢視器
    當我執行到那個錯誤的時候
    檢視器 內會顯示  此訊息是 binary 格式 ,所以無法顯示
    2010年2月18日 上午 02:23
  •                 If line <> Nothing Then
                        Clipboard.Clear()
                        Clipboard.SetText(line)
                        Clipboard.GetText()
                    End If

    Clipboard.SetText Method (String, TextDataFormat)

    The Clipboard class can only be used in threads set to single thread apartment (STA) mode. To use this class, ensure that your Main method is marked with the STAThreadAttribute attribute.

    專案可以放在網路空間嗎?無法重現相同的錯誤訊息,在下是用VB2008 SP1,是否有別的程式執行緒同時存取剪貼簿,造成錯誤...

    • 已標示為解答 白楓林 2010年2月20日 上午 03:16
    2010年2月18日 上午 02:56
  • 前輩 先謝謝您的 教導...
    就算用了 clean 也是一樣 會出現問題
    我的執行環境是
    VS 2008 Pro , FrameWork 3.5

    我的測試專案 下載點如下
    http://aymcaq.bay.livefilestore.com/y1p0ny_H5Q2HVH_mgF8j_tNn5JB5MYimPkXqMq6eYkYLs1BOeAsTxjSGeKilWvD7VxUWhJr_vSsmdrz8VA95eVWGpkiX0aOgl5L/WindowsApplication1.rar?download


    執行的時候 應該沒有一個會使用到 剪貼簿的軟體
    我 執行的軟體
    Firefox , UltraEdit , Q-Dir , Notepad , Pc tools Firewall , Nod 32 , minimem (記憶體管理)
    Utorrent , MSN, Yahoo 即時通 , NetLimit , Orbit , FlashGet , Internet Download (續傳軟體)
    WindowsBlind(佈景置換軟體), Locate (搜尋硬碟檔案軟體)


    但是如果我 執行了 ClipMate (剪貼簿管理軟體)
    則這些問題 完全消失
    如果把 ClipMate 拿掉 又會出現 "要求的剪貼簿作業失敗"
    在 VS 2008 中 我有安裝Xencode 混淆程式

    ===
    我主要的 程式碼 都在 Button 4 , 5 , 6
    2010年2月18日 上午 11:56
  • 我這裡也沒辦法重現錯誤
    我想你可以直接進偵錯模式,在出現錯誤的時候去看ReadLine()讀取到的是什麼
    • 已標示為解答 白楓林 2010年2月20日 上午 03:16
    • 已取消標示為解答 白楓林 2010年2月20日 上午 03:16
    • 已標示為解答 白楓林 2010年2月20日 上午 03:16
    2010年2月18日 下午 01:17
  • 剪貼簿允許你取出前做檢查,你可以先檢查再取出。

    你無法預期會不會有其他程式動剪貼簿,比如說 FlashGet ...


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 白楓林 2010年2月20日 上午 03:16
    2010年2月18日 下午 02:51
  • 各位前輩門 真不好意思

    尤其 心冷 前輩 給了一個提示  Flashget
    讓我去檢查他的 設定
    才知道...FlashGet 內定 有「監視」剪貼簿的行為
    才導致我 程式出問題...
    把它關掉就完全沒事情了...@_@

    這是因為FlashGet 他的程式 「強制」問題嗎?
    2010年2月20日 上午 03:16