C#-System.IO 读取文件的特定行

文件:Example.csv

126
0
Assets/Illusion/assetbundle/chara/list/characustom/00/ao_waist_00.bytes
ID,Kind,Possess,Name,MainManifest,MainAB,MainData,Parent,ThumbAB,ThumbTex
22173,0,1,Ara Yama Raja charm1,abdata,chara/ao_acc_ara.unity3d,p_acs_arayrcharm1,a_n_waist_f,chara/thumb.unity3d,arayrcharm1

代码


using System;
using System.IO;

namespace FileHelperTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"C:\Example.csv";
            try
            {
                string[] lines = File.ReadAllLines(path);
                string specificLine = lines[3];
                Console.WriteLine($"The line 3 content is:{specificLine}");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }
}

讲解一下这段程序什么意思.
这段程序的目的是读取某个文件里特定行的内容.首先ReadAllLines这个方法会读取给予的路径里的文件,然后把每一行化成数组lines(类型为string)里的一个元素.如果要第一行的内容,就打印lines[0]就可以了.

在C语言中,无法直接调用C#的System.IO读取文件。但是可以使用C#开发一个DLL动态链接库,然后在C语言中通过调用该DLL中的函数来实现读取文件的功能。 以下是一个示例代码: 首先,在C#中创建一个类库项目,将以下代码添加到类文件中: ``` using System.IO; using System.Runtime.InteropServices; namespace MyFileReader { public class FileReader { [DllImport("kernel32.dll")] private static extern bool SetDllDirectory(string lpPathName); [DllImport("kernel32.dll")] private static extern IntPtr LoadLibrary(string lpFileName); [DllImport("kernel32.dll")] private static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName); [DllImport("kernel32.dll")] private static extern bool FreeLibrary(IntPtr hModule); public static string ReadFile(string filePath) { // 将DLL所在目录添加到系统路径中 SetDllDirectory(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)); // 加载DLL IntPtr hModule = LoadLibrary("MyFileReader.dll"); // 获取函数指针 IntPtr pReadFile = GetProcAddress(hModule, "ReadFile"); // 转换函数指针为委托 ReadFileDelegate readFile = (ReadFileDelegate)Marshal.GetDelegateForFunctionPointer(pReadFile, typeof(ReadFileDelegate)); // 调用函数 string result = readFile(filePath); // 释放DLL FreeLibrary(hModule); return result; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate string ReadFileDelegate(string filePath); } } ``` 这里定义了一个名为FileReader的类,其中包含一个名为ReadFile的静态方法,用于读取指定文件的内容。在ReadFile方法中,首先通过DllImport来引入kernel32.dll,然后使用LoadLibrary函数加载MyFileReader.dll,再使用GetProcAddress函数获取MyFileReader.dll中的ReadFile函数的指针,最后将该指针转换为委托并调用该委托。注意,ReadFile函数的调用约定必须是Cdecl。这里使用了UnmanagedFunctionPointer属性来指定。 接下来,在C#中创建另一个控制台应用程序项目,将以下代码添加到Main方法中: ``` string filePath = @"C:\file.txt"; string fileContent = FileReader.ReadFile(filePath); Console.WriteLine(fileContent); ``` 这里调用了FileReader类的ReadFile方法读取名为file.txt的文件的所有内容,并将其输出到控制台。 最后,在C语言中,可以使用LoadLibrary函数加载MyFileReader.dll,然后使用GetProcAddress函数获取MyFileReader.dll中的ReadFile函数的指针,并将该指针转换为函数指针,最后调用该函数指针即可。 以下是一个示例代码: ``` #include <stdio.h> #include <Windows.h> typedef char*(*ReadFileFunc)(char*); int main() { HMODULE hModule = LoadLibrary("MyFileReader.dll"); if (hModule == NULL) { printf("无法加载DLL\n"); return 1; } ReadFileFunc pReadFile = (ReadFileFunc)GetProcAddress(hModule, "ReadFile"); if (pReadFile == NULL) { printf("无法获取函数指针\n"); FreeLibrary(hModule); return 1; } char* filePath = "C:\\file.txt"; char* fileContent = pReadFile(filePath); printf("%s", fileContent); FreeLibrary(hModule); return 0; } ``` 这里使用LoadLibrary函数加载MyFileReader.dll,然后使用GetProcAddress函数获取MyFileReader.dll中的ReadFile函数的指针,并将该指针转换为函数指针。最后调用该函数指针读取名为file.txt的文件,并将其输出到控制台。注意,这里需要使用双反斜杠("\\")来表示文件路径中的单个反斜杠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值