如何从 .NET 中的 x 行读取文件



我从文件系统中读取一个文件并将其FTP发送到FTP服务器。我现在请求跳过第一行(它是带有标题信息的 CSV)。我想我可以以某种方式用流的偏移量来做到这一点。读取方法(或写入方法),但我不确定如何从一行转换字节数组偏移量。

我将如何计算偏移量以告诉它仅从文件的第二行读取?

谢谢

// Read the file to be uploaded into a byte array
        stream = File.OpenRead(currentQueuePathAndFileName);
        var buffer = new byte[stream.Length];
        stream.Read(buffer, 0, buffer.Length);
        stream.Close();
        // Get the stream for the request and write the byte array to it
        var reqStream = request.GetRequestStream();
        reqStream.Write(buffer, 0, buffer.Length);
        reqStream.Close();
        return request;

您应该使用 File.ReadAllLines。它返回字符串数组。然后,只需strArray.Skip(1)将返回除第一行之外的所有行。

更新

这是代码:

var stringArray = File.ReadAllLines(fileName);
if (stringArray.Length > 1)
{
   stringArray = stringArray.Skip(1).ToArray();
   var reqStream = request.GetRequestStream();
   reqStream.Write(stringArray, 0, stringArray.Length);
   reqStream.Close();       
}

如果你只需要跳过一行,你可以使用阅读器类,阅读行,获取当前位置并像往常一样阅读内容。

using (var stream = File.OpenRead("currentQueuePathAndFileName"))
using (var reader = new StreamReader(stream))
{
    reader.ReadLine();
    Console.Write(stream.Position);
    var buffer = new byte[stream.Length - stream.Position];
    stream.Read(buffer, 0, buffer.Length);
    var reqStream = request.GetRequestStream();
    reqStream.Write(buffer, 0, buffer.Length);
    reqStream.Close();
    return request;
}

你为什么要使用RequestStream?你不是应该使用HttpContext.Current.Response.OutputStream吗?

您可以从流输入中获取字符串,将其解析为具有数组拆分的行,然后删除第一个,然后将其重新组合在一起,或者,您可以正则表达式出第一行,或者只是查找换行符并从那里复制字符串。

你应该使用 [StreamReader][1] 类。然后通过使用 ReadLine 直到结果为 null,您可以逐一读取所有行。只需保留第一个即可满足您的要求。读取内存中的所有文件通常不是一个好主意(随着文件变大,它不会扩展)

暴力方法是遍历源字节数组并查找回车符的第一个匹配项,后跟换行符 (CR+LF)。这样,您将知道源数组中的偏移量,以排除 CSV 文件中的第一行。

下面是一个示例:

const byte carriageReturn = 13;
const byte lineFeed = 10;
byte[] file = File.ReadAllBytes(currentQueuePathAndFileName);
int offset = 0;
for (int i = 0; i < file.Length; i++)
{
    if (file[i] == carriageReturn && file[++i] == lineFeed)
    {
        offset = i + 2;
        break;
    }
}

请注意,此示例假定源 CSV 文件是在 Windows 上创建的,因为换行符在其他平台上的表达方式不同。

相关资源:

  • 环境.换行符属性

相关内容

  • 没有找到相关文章

最新更新