Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure函数流C#_C#_Azure_Azure Functions - Fatal编程技术网

Azure函数流C#

Azure函数流C#,c#,azure,azure-functions,C#,Azure,Azure Functions,我正在尝试使用Azure应用程序函数在创建blob(json文件)时触发,然后将json解压缩到CSV文件并转储到其他存储位置。但是,当我使用如下输出绑定时: [Blob("test-ex/{name}.csv", FileAccess.Write, Connection = "my_storage_account")] Stream outputBlob 无论是否写入输出流,它似乎都会创建一个0字节的文件。为什么要创建此文件?如何防止它发生 有关编写csv内容的其他详细信息如下: strin

我正在尝试使用Azure应用程序函数在创建blob(json文件)时触发,然后将json解压缩到CSV文件并转储到其他存储位置。但是,当我使用如下输出绑定时:

[Blob("test-ex/{name}.csv", FileAccess.Write, Connection = "my_storage_account")] Stream outputBlob
无论是否写入输出流,它似乎都会创建一个0字节的文件。为什么要创建此文件?如何防止它发生

有关编写csv内容的其他详细信息如下:

string csv_contents = "column1,column2,column3";

using (StreamWriter sw = new StreamWriter(outputBlob))
{
    sw.Write(csv_contents);
}
为什么要创建此文件?如何防止它发生

当您输入blob时,它是json,输出blob是.csv。我建议您可以直接使用字符串类型

演示代码

public static void Run([BlobTrigger("samples-workitems/{name}", Connection = "AzureWebJobsStorage")]string myBlob, string name, [Blob("test2/{name}.csv", FileAccess.Write, Connection = "AzureWebJobsStorage")]out string outputBlob,  TraceWriter log)
{
            var outputstring = jsonToCSV(myBlob, ","); // add your logic to covert json to CSV

            log.Info($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
            outputBlob = outputstring;
 }
如果您想使用类型,我们可以将流复制到outputBlob

 public static void Run([BlobTrigger("test/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, [Blob("test2/{name}.csv", FileAccess.Write, Connection = "AzureWebJobsStorage")] Stream outputBlob, TraceWriter log)
  {
            myBlob.Position = 0;
            var str = StreamToString(myBlob);
            var outputstring =jsonToCSV(str,",");// add your logic to covert json to CSV
            var stream = StringtoStream(outputstring);
            stream.Position = 0;
            stream.CopyTo(outputBlob);
            log.Info($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");

   }
我将演示代码json文件从另一个文件转换为csv。你可以自己处理

 public static DataTable jsonStringToTable(string jsonContent)
 {
       DataTable dt = JsonConvert.DeserializeObject<DataTable>(jsonContent);
       return dt;
 }
 public static string jsonToCSV(string jsonContent, string delimiter)
 {
        StringWriter csvString = new StringWriter();
        using (var csv = new CsvWriter(csvString))
        {

            csv.Configuration.Delimiter = delimiter;

            using (var dt = jsonStringToTable(jsonContent))
            {

                foreach (DataColumn column in dt.Columns)
                {
                    csv.WriteField(column.ColumnName);
                }
                csv.NextRecord();

                foreach (DataRow row in dt.Rows)
                {
                    for (var i = 0; i < dt.Columns.Count; i++)
                    {
                        csv.WriteField(row[i]);
                    }
                    csv.NextRecord();
                }
            }
        }
        return csvString.ToString();
    }

  public static string StreamToString(Stream stream)
  {
        StreamReader reader = new StreamReader(stream);
        string text = reader.ReadToEnd();
        return text;
  }
  public static Stream StringtoStream(string str)
  {
        byte[] byteArray = Encoding.UTF8.GetBytes(str);
        MemoryStream stream = new MemoryStream(byteArray);
        return stream;
  }
公共静态数据表jsonStringToTable(字符串jsonContent)
{
DataTable dt=JsonConvert.DeserializeObject(jsonContent);
返回dt;
}
公共静态字符串jsonToCSV(字符串jsonContent,字符串分隔符)
{
StringWriter csvString=新StringWriter();
使用(var csv=新的CsvWriter(csvString))
{
csv.Configuration.Delimiter=分隔符;
使用(var dt=jsonStringToTable(jsonContent))
{
foreach(dt.Columns中的DataColumn列)
{
csv.WriteField(column.ColumnName);
}
csv.NextRecord();
foreach(数据行中的数据行)
{
对于(var i=0;i