使用 sf_open 时,libsndfile 在 512 个字符处截断路径

Posted

技术标签:

【中文标题】使用 sf_open 时,libsndfile 在 512 个字符处截断路径【英文标题】:libsndfile truncates path at 512 characters when using sf_open 【发布时间】:2014-10-24 14:05:56 【问题描述】:

标题说明了一切。写入路径较长的文件时,路径会被截断。

string filename="/pathwithmorethan512characters/song.wav";  
sf_open(filename.c_str(), SFM_WRITE, &sfinfo);

有什么解决方法的想法吗?

我正在使用带有 libsndfile.so.1.0.25 的 linux。

【问题讨论】:

其实在 src/common.h 中宏 SF_FILENAME_LEN 设置为 512。但是为什么呢? 我建议你在 Github 上提出一个票。 【参考方案1】:

自 2014 年 10 月修订版 1.0.26 以来,common.h 文件已更新,存储空间已翻倍。

您现在可以存储最多 1024 个字符的路径:

#define SF_FILENAME_LEN         (1024)

相应的错误信息也已更新。这个例子:

#include <stdio.h>
#include <stdlib.h>
#include "sndfile.h"

int main(void)

  char *inFileName;
  SNDFILE *inFile;
  SF_INFO inFileInfo;

  inFileName = "long_file_name_above_1024_characters.wav";
  inFile = sf_open(inFileName, SFM_READ, &inFileInfo);
  puts(sf_strerror(inFile));

  sf_close(inFile);
  return 0;

返回:

错误:提供的文件名太长。

【讨论】:

以上是关于使用 sf_open 时,libsndfile 在 512 个字符处截断路径的主要内容,如果未能解决你的问题,请参考以下文章

使用 sf_open_fd() 时,libsndfile 总是出现段错误

iOS 上的 libsndfile

使用 VS2010 的 libsndfile 奇怪行为

为 ARM 架构构建 libsndfile 库

将 libsamplerate 与 libsndfile 一起使用

Libsndfile - 如何处理额外的块(元数据)