MorenLendan 发表于 2026-1-10 23:05:09

一个C#代码的报错问题 希望得到各位大佬和老师们管理员们的指正

欸刚开发了一个项目出现错误,进度似乎卡壳了.....
所使用语言为C#
版本为5.25.20
所遭遇的问题是,如下:



1>------ 生成 已启动: 项目: 虾皮shopee电商数据采集,配置: Debug|AnyCPU ------
1>C:\Users\Administrator\Desktop\新建文件夹\ResponseFilterEvent.cs(12,40,12,68): error CS0246: 未能找到类型或命名空间名“FBroSharpResponseFilterEvent”(是否缺少 using 指令或程序集引用?)
1>C:\Users\Administrator\Desktop\新建文件夹\ResponseFilterEvent.cs(68,25,68,54): error CS0246: 未能找到类型或命名空间名“FBroSharpResponseFilterStatus”(是否缺少 using 指令或程序集引用?)
1>C:\Users\Administrator\Desktop\新建文件夹\BrowserEvent.cs(92,50,92,75): error CS0115: “BrowserEvent.GetResourceResponseFilter(IFBroSharpBrowser, IFBroSharpFrame, IFBroSharpRequest, IFBroSharpResponse)”: 没有找到适合的方法来重写
========== 生成: 0 成功,1 失败,0 更新,0 跳过 ==========




出现了很大的麻烦和危机,希望有老师们和管理员们可以指正一下我所遭遇的问题
代码报错修复了一晚上也没有修复好,文档内也没有查看到解决办法
感谢各位老师们和管理员们的点评和指教,我会虚心接受你们的建议和方案的,拜托了
using FBroSharp;
using FBroSharp.Callback;
using FBroSharp.DataType;
using FBroSharp.Lib;
using System;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace 虾皮shopee电商数据采集
{
    public class ResponseFilterEvent : FBroSharpResponseFilterEvent
    {
      private BrowserForm _form;
      public string url = "";
      
      private MemoryStream ms = new MemoryStream();
      private BinaryWriter writer;
      private DateTime startTime;

      public ResponseFilterEvent(BrowserForm form)
      {
            _form = form;
      }

      /// <summary>
      /// 初始化过滤器
      /// </summary>
      /// <param name="flag">标志参数</param>
      /// <returns>是否开始拦截</returns>
      public override bool InitFilter(long flag)
      {
            try
            {
                Console.WriteLine($"[响应拦截] 初始化过滤器: {url}");
                return true; // 返回true开始拦截
            }
            catch (Exception ex)
            {
                Console.WriteLine($"[响应拦截] 初始化过滤器失败: {ex.Message}");
                return false;
            }
      }

      /// <summary>
      /// 开始处理响应数据
      /// </summary>
      /// <param name="flag">标志参数</param>
      public override void Start(long flag)
      {
            try
            {
                ms = new MemoryStream();
                writer = new BinaryWriter(ms);
                startTime = DateTime.Now;
               
                Console.WriteLine($"[响应拦截] 开始拦截响应数据: {url}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"[响应拦截] 开始处理响应失败: {ex.Message}");
            }
      }

      /// <summary>
      /// 处理响应数据流
      /// </summary>
      public override FBroSharpResponseFilterStatus Filter(
            long flag,
            Stream dataIn,
            out long dataInRead,
            Stream dataOut,
            out long dataOutWritten)
      {
            dataInRead = 0;
            dataOutWritten = 0;

            try
            {
                if (dataIn == null)
                {
                  return FBroSharpResponseFilterStatus.RESPONSE_FILTER_DONE;
                }

                // 计算可读取的数据量
                dataInRead = Math.Min(dataIn.Length, dataOut.Length);
                dataOutWritten = dataInRead;

                if (dataInRead > 0)
                {
                  var readBytes = new byte;
                  dataIn.Read(readBytes, 0, (int)dataInRead);
                  dataOut.Write(readBytes, 0, (int)dataOutWritten);

                  // 将数据写入内存流保存
                  if (writer != null)
                  {
                        writer.Write(readBytes);
                  }

                  // 如果还有更多数据需要读取
                  if (dataInRead < dataIn.Length)
                  {
                        return FBroSharpResponseFilterStatus.RESPONSE_FILTER_NEED_MORE_DATA;
                  }
                }

                return FBroSharpResponseFilterStatus.RESPONSE_FILTER_DONE;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"[响应拦截] 处理响应数据失败: {ex.Message}");
                return FBroSharpResponseFilterStatus.RESPONSE_FILTER_ERROR;
            }
      }

      /// <summary>
      /// 完成响应数据处理
      /// </summary>
      public override void End(long flag)
      {
            try
            {
                if (ms == null) return;
               
                byte[] data = ms.ToArray();
                var duration = DateTime.Now - startTime;
               
                Console.WriteLine($"[响应拦截] 响应拦截完成: {url}, 数据大小: {data.Length} 字节, 耗时: {duration.TotalMilliseconds}ms");
               
                if (data.Length > 0)
                {
                  // 处理响应数据
                  ProcessResponseData(data);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"[响应拦截] 完成响应处理失败: {ex.Message}");
            }
            finally
            {
                // 清理资源
                CleanupResources();
            }
      }

      /// <summary>
      /// 处理响应数据
      /// </summary>
      private void ProcessResponseData(byte[] data)
      {
            try
            {
                string responseText = Encoding.UTF8.GetString(data);
               
                // 保存到文件
                string dataDir = Path.Combine(Directory.GetCurrentDirectory(), "data");
                if (!Directory.Exists(dataDir))
                {
                  Directory.CreateDirectory(dataDir);
                }

                string timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss");
                string itemId = ExtractItemIdFromUrl(url);
                string fileName = $"item_{itemId}_{timestamp}.json";
                string filePath = Path.Combine(dataDir, fileName);

                File.WriteAllText(filePath, responseText);

                // 通知主程序
                _form.AddInterceptedRequest(url, (int)data.Length, filePath, responseText);
               
                Console.WriteLine($"[数据保存] {fileName} ({data.Length} 字节)");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"[数据处理] 处理响应数据失败: {ex.Message}");
            }
      }

      private string ExtractItemIdFromUrl(string url)
      {
            try
            {
                if (url.Contains("item_id="))
                {
                  int start = url.IndexOf("item_id=") + 8;
                  int end = url.IndexOf('&', start);
                  if (end == -1) end = url.Length;
                  return url.Substring(start, end - start);
                }
            }
            catch { }
            return "unknown";
      }

      /// <summary>
      /// 清理资源
      /// </summary>
      private void CleanupResources()
      {
            try
            {
                writer?.Dispose();
                ms?.Dispose();
                writer = null;
                ms = null;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"[响应拦截] 清理资源失败: {ex.Message}");
            }
      }

      // 覆盖基类的Destroy方法
      public override void Destroy()
      {
            CleanupResources();
      }
    }
}

MorenLendan 发表于 2026-1-12 00:49:42

mosheng 发表于 2026-1-12 00:46
QQ/微信:1098901025,只负责指导可远程答疑,手上单子太多了

谢谢莫生老师,我加您QQ

mosheng 发表于 2026-1-12 00:46:16

MorenLendan 发表于 2026-1-11 20:35
您好,莫生老师我的c#不会写,我想请您帮我看看,我也是在b站看到您的,关注您时间也挺长了,有偿,一天1 ...

QQ/微信:1098901025,只负责指导可远程答疑,手上单子太多了

MorenLendan 发表于 2026-1-11 20:35:05

mosheng 发表于 2026-1-10 23:45
第一个报错,在顶部加上:using FBroSharp.Event;
第二个报错,在顶部加上:using FBroSharp.Const;



您好,莫生老师我的c#不会写,我想请您帮我看看,我也是在b站看到您的,关注您时间也挺长了,有偿,一天1500,工期一到就给

mosheng 发表于 2026-1-10 23:45:20

第一个报错,在顶部加上:using FBroSharp.Event;
第二个报错,在顶部加上:using FBroSharp.Const;

第三个报错,去看继承类FBroSharpBrowserEvent里正确的写法,
这些都是C#里很基础的东西,装个fittencode插件会好一点
页: [1]
查看完整版本: 一个C#代码的报错问题 希望得到各位大佬和老师们管理员们的指正