FileSystem.Print具有无效参数

时间:2015-02-20 06:35:47

标签: c#

我使用以下代码打印我的帐单。我收到以下错误" Filesystem.Print有无效的参数",请帮助克服此错误。

    using Microsoft.Visualbasic;
    .......................
    public void PrintHeader()
    {
        FileSystem.Print(eInit + eCentre + "My Shop","");
        FileSystem.Print("Tel:0123 456 7890","");
        FileSystem.Print("Web: www.ame.com");
        FileSystem.Print("sales@ame.com");
        FileSystem.Print("VAT Reg No:123 4567 89" + eLeft);
        PrintDashes();
    }

3 个答案:

答案 0 :(得分:1)

public static void Print(
int FileNumber,
params Object[] Output
)

这显然是一个Visual Basic函数。 FileNumber是使用FileOpen打开的文件的句柄(它是Visual Basic 6.0及更早版本中OPEN的残余部分。)

示例:

int myFileHandle = 1;
FileSystem.FileOpen(myFileHandle, "log.txt", OpenMode.Output);
FileSystem.Print(myFileHandle, "Hello", " ", "World!");
FileSystem.FileClose(myFileHandle);

您需要先打开一个带有指定句柄的文件,然后将其传递给FileNumber。

另一个更好的解决方案是使用这些API,因为它们已经过时了。首选System.IO命名空间。

修改

要使用System.IO命名空间,您可以打开StreamWriter:

var writer = new StreamWriter("mybill.txt");

您的PrintHeader方法需要TextWriter输入(StreamWriter扩展TextWriter

public void PrintHeader(TextWriter output)
{
    output.WriteLine(eInit + eCentre + "My Shop");
    output.WriteLine("Tel:0123 456 7890","");
    output.WriteLine("Web: www.ame.com");
    output.WriteLine("sales@ame.com");
    output.WriteLine("VAT Reg No:123 4567 89" + eLeft);
    output.WriteLine(new string('-', 20)); 
}

如果您有冒险精神,可以将其设为异步

public async Task PrintHeaderAsync(TextWriter output)
{
    await output.WriteLineAsync(eInit + eCentre + "My Shop");
    await output.WriteLineAsync("Tel:0123 456 7890","");
    await output.WriteLineAsync("Web: www.ame.com");
    await output.WriteLineAsync("sales@ame.com");
    await output.WriteLineAsync("VAT Reg No:123 4567 89" + eLeft);
    await output.WriteLineAsync(new string('-', 20));
}

答案 1 :(得分:0)

FileSystem.Print方法如下所示:

public static void Print(
    int FileNumber,
    params Object[] Output
)

所以你必须在Print方法中传递两个参数,但在某些情况下你只传递一个参数,因此你得到了这个错误。

答案 2 :(得分:0)

问题似乎是"我该如何打印?"

解决方案是使用System.Drawing.Printing命名空间。

但是我把它当作一个小挑战,所以我创建了一个PrinterWriter类,你可以用作普通的文本编写器。

源代码可在this gist中找到,其用法很简单:

using(var myPrinter = new PrinterWriter())
{
  myPrinter.WriteLine("Hello World!");
}

如果要写入另一台打印机或更改字体(默认为Consolas 10pt),可以为构造函数提供参数。

使用很重要,因为它在调用Dispose()时开始打印。

注意:它不会自动换行。