GVKun编程网logo

windows – event.getFile().getFileName()返回带有PrimeFaces 3.5的JSF2.0中完整路径的文件名

15

本文的目的是介绍windows–event.getFile().getFileName()返回带有PrimeFaces3.5的JSF2.0中完整路径的文件名的详细情况,我们将通过专业的研究、有关数据的

本文的目的是介绍windows – event.getFile().getFileName()返回带有PrimeFaces 3.5的JSF2.0中完整路径的文件名的详细情况,我们将通过专业的研究、有关数据的分析等多种方式,同时也不会遗漏关于ASP.net C#:如何使用File.ReadLines(fileName).GetEnumerator()逐行读取20到200 GB的文件?、asp.net FileUpload.FileName返回完整路径,即ie,当不需要时、c – QFileDialog :: getSaveFileName和默认的selectedFilter、c – 是否有一个替代Windows FindFirstFile / FindNextFile API不搜索短文件名?的知识。

本文目录一览:

windows – event.getFile().getFileName()返回带有PrimeFaces 3.5的JSF2.0中完整路径的文件名

windows – event.getFile().getFileName()返回带有PrimeFaces 3.5的JSF2.0中完整路径的文件名

我正在使用PrimeFaces v3.5使用Firefox浏览器在我的 Windows机器上传文件. event.getFile().getFileName()返回带有完整路径的文件名,这会导致进一步的问题. PrimeFaces内部正在使用Apache公共资源.我检查了 javadoc也没有帮助我.

为了克服这个问题,我修改了程序,有点像以下方式 –

String fileName = event.getFile().getFileName();
        fileName = fileName.substring(fileName.lastIndexOf("\\"));

但它不稳健可靠.有什么建议吗?

解决方法

Commons IO提供 FilenameUtils#getName()用于确切目的.

String filename = FilenameUtils.getName(event.getFile().getFileName());

也可以看看:

> Commons FileUpload FAQ on the subject
> How to save uploaded file in JSF

ASP.net C#:如何使用File.ReadLines(fileName).GetEnumerator()逐行读取20到200 GB的文件?

ASP.net C#:如何使用File.ReadLines(fileName).GetEnumerator()逐行读取20到200 GB的文件?

我们正在尝试使用以下代码.

public static int SplitFile(string fileName,string tmpFolder,List<string> queue,int splitSize = 100000)
    {
        int chunk = 0;
        if (!Directory.Exists(tmpFolder))
            Directory.CreateDirectory(tmpFolder);
        using (var lineIterator = File.ReadLines(fileName).GetEnumerator())
        {
            bool stillGoing = true;
            for (chunk = 0; stillGoing; chunk++)
            {
                stillGoing = WriteChunk(lineIterator,splitSize,chunk,tmpFolder,queue);
            }
        }
        return chunk;
    }

    private static bool WriteChunk(IEnumerator<string> lineIterator,int splitSize,int chunk,List<string> queue)
    {
        try
        {

            //int tmpChunkSize = 1000;
            //int tmpChunkInc = 0;
            string splitFile = Path.Combine(tmpFolder,"file" + chunk + ".txt");

            using (var writer = File.CreateText(splitFile))
            {
                queue.Add(splitFile);
                for (int i = 0; i < splitSize; i++)
                {
                    if (!lineIterator.MoveNext())
                    {
                        return false;
                    }
                    writer.WriteLine(lineIterator.Current);

                }
            }

            return true;
        }
        catch (Exception)
        {

            throw;
        }

    }

它创建了大约36个文本文件(大约800 MB),但是在lineIterator.MoveNext()创建第37个文件时开始抛出“Out of memory exception”.

而lineIterator.Current显示调试器中的值.

解决方法

因为它是一个巨大的文件,你应该读它BinaryReader的Seek和ReadBytes方法.

您可以看到一个简单的示例here.使用ReadBytes检查最后一行后,并以您阅读的特定行数写入流程文件.不要写你读的每一行,也不要把所有的数据保存在内存中.

剩下的就在你手中.

也许真的是那个When does File.ReadLines free resources

IEnumerable doesn’t inherit from Idisposable because typically,the class that implements it only gives you the promise of being enumerable,it hasn’t actually done anything yet that warrants disposal.

asp.net FileUpload.FileName返回完整路径,即ie,当不需要时

asp.net FileUpload.FileName返回完整路径,即ie,当不需要时

从我对asp.net FileUpload.FileName的了解,在Firefox中返回完整路径,它只返回文件名.我将如何从返回的字符串中删除路径,因为我只需要html编码的文件名.

解决方法

您可以使用 Path静态类获取文件名.
var fileName = Path.GetFileName(somePath);

和HttpUtility静态类来编码它.

var encoded = HttpUtility.HtmlEncode(fileName);

c – QFileDialog :: getSaveFileName和默认的selectedFilter

c – QFileDialog :: getSaveFileName和默认的selectedFilter

我有getSaveFileName和一些过滤器,我想在用户打开“保存”对话框时选择其中一个. Qt文档说明如下:

The default filter can be chosen by setting selectedFilter to the desired value.

我尝试以下变体:

QString selFilter="All files (*.*)";
QFileDialog::getSaveFileName(this,"Save file",QDir::currentPath(),"Text files (*.txt);;All files (*.*)",&selFilter);

但是当对话框出现时,会选择“文本文件”过滤器(通常情况下,列表中的第一个过滤器).我也尝试了以下所有方法:

selFilter="All files";
selFilter="All files (*.*)\n";
selFilter="All files (*.*);;";
selFilter="All files (*.*)\0";

和这些变体的不同混合物.我的代码中的过滤器列表的格式是根据文档(来自Qt docs的示例行)完成的:

"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"

请注意,输出到selFilter变量的工作正常:用户按OK后,selFilter变量包含用户选择的过滤器.

平台:Linux(OpenSUSE 12.1),Qt 4.7.4,gcc 4.6.2.

那么如何设置默认过滤器?!

最佳答案
您可以尝试此示例应用程序并验证,如果它有任何区别.在这种情况下使用直接对话框构造时,您可以更好地控制对象.

#include 

通常这种行为是内存损坏的标志.但是,我已经用valgrind检查过了(我有Qt 4.8.1)并且FontConfig只有一些误报.

c – 是否有一个替代Windows FindFirstFile / FindNextFile API不搜索短文件名?

c – 是否有一个替代Windows FindFirstFile / FindNextFile API不搜索短文件名?

我正在使用 Windows API调用 FindFirstFile和 FindNextFile来搜索与目录中的某个通配符字符串匹配的文件.例如,我可能想在目录中找到所有XML文件,因此我使用模式“* .xml”进行搜索.

我遇到的问题是,如果我正在寻找3个字母的扩展名,并且一个文件的扩展名以3个字母的扩展名开头,那么我的搜索将被抓住,即使扩展名包含更多的字符首先3.例如,如果我的文件名为somelongname.xmlaaaa,这将通过搜索“* .xml”获取.该文件的短名称为somelo〜1.xml,与我的通配符字符串相匹配.

我可以做自己的通配符来解决这个问题,但是可能Windows API能够比我更有效地执行此操作,而我的代码会更简单.据我所知,没有办法强制这些功能忽略短名称.有没有API Windows公开的这个功能?

解决方法

查看FindFirstFileEx – 它有一个fInfoLevelId参数,它接受FINDEX_INFO_LEVELS枚举:
typedef enum _FINDEX_INFO_LEVELS {  FindExInfoStandard,FindExInfoBasic,FindExInfoMaxInfoLevel } FINDEX_INFO_LEVELS;

FindExInfoBasic

The FindFirstFileEx function does not query the short file name,improving overall enumeration speed. The data is returned in a WIN32_FIND_DATA structure,and the cAlternateFileName member is always a NULL string.

然而:

Windows Server 2008,Windows Vista,Windows Server 2003,and Windows XP: This value is not supported until Windows Server 2008 R2 and Windows 7.

今天关于windows – event.getFile().getFileName()返回带有PrimeFaces 3.5的JSF2.0中完整路径的文件名的介绍到此结束,谢谢您的阅读,有关ASP.net C#:如何使用File.ReadLines(fileName).GetEnumerator()逐行读取20到200 GB的文件?、asp.net FileUpload.FileName返回完整路径,即ie,当不需要时、c – QFileDialog :: getSaveFileName和默认的selectedFilter、c – 是否有一个替代Windows FindFirstFile / FindNextFile API不搜索短文件名?等更多相关知识的信息可以在本站进行查询。

本文标签: