file name change to unix file with escaping
-
wrote on 20 Nov 2019, 17:51 last edited by
Hi,
I developed my app in Mac and when I transfer to the linux there is qfile file read problem due to some of the file and dirs has " " spaces.
I try to QString.replace(" " , "\" ) and looks replaced .
but even I saw the file name escaped with \ in linux , it says cant find the name.
is there any best practices to change file name to readable format in linux ?
-
Hi,
I developed my app in Mac and when I transfer to the linux there is qfile file read problem due to some of the file and dirs has " " spaces.
I try to QString.replace(" " , "\" ) and looks replaced .
but even I saw the file name escaped with \ in linux , it says cant find the name.
is there any best practices to change file name to readable format in linux ?
wrote on 20 Nov 2019, 18:15 last edited by@RahibeMeryem said in file name change to unix file with escaping:
I try to
QString.replace(" " , "\" )
and looks replaced .As it stands copied from your post, this would not even compile. So it's not possible to know what you intended?
I have never used Mac, but I thought it had a Linux file/pathname syntax, so I don't know what you mean about the problem with spaces. What do you mean about "readable format in linux"?
Unless someone else knows what this issue is about, you might like to explain just what sort of problem you are having?
-
wrote on 20 Nov 2019, 19:03 last edited by
Mac os path : file = "/Users/xxx/test dene biri/adf.jpg"
This can be read by Qt QFile (file)
but in Linux there is space problem.
I mean that.
-
Mac os path : file = "/Users/xxx/test dene biri/adf.jpg"
This can be read by Qt QFile (file)
but in Linux there is space problem.
I mean that.
wrote on 20 Nov 2019, 19:12 last edited by JonBMac os path : file = "/Users/xxx/test dene biri/adf.jpg"
but in Linux there is space problem.
No, there isn't. If that path exists on a Linux file system,
QFile()
will be able to open/read it.But if it's not there, it won't. You do have that directory,
/Users/xxx/test dene bir
, on your Linux box, don't you?What exactly is the problem?
-
wrote on 21 Nov 2019, 04:08 last edited by
I'd suggest using perl to rename the files in question, replacing spaces with underscores...and as a I policy I prohibit folks from ever putting spaces in filenames. It's bad practice in any platform.
#! /usr/bin/perl $q="\x22"; while (<STDIN>) { chomp; $o=$_; s/[\x00-\x2a]//g; s/[\x5b-\x5e]//g; s/[\x7b-\x7f]//g; s/\x60//g; s/\x2f//g; ($_ ne $o) && system "mv $q$o$q $q$_$q\n"; };
then ls | remove_spaces.pl
-
I'd suggest using perl to rename the files in question, replacing spaces with underscores...and as a I policy I prohibit folks from ever putting spaces in filenames. It's bad practice in any platform.
#! /usr/bin/perl $q="\x22"; while (<STDIN>) { chomp; $o=$_; s/[\x00-\x2a]//g; s/[\x5b-\x5e]//g; s/[\x7b-\x7f]//g; s/\x60//g; s/\x2f//g; ($_ ne $o) && system "mv $q$o$q $q$_$q\n"; };
then ls | remove_spaces.pl
wrote on 21 Nov 2019, 08:43 last edited by JonB-
Why would you take a Mac name with spaces in it and replace for Linux? In the sense of the OP says the spaces "work" under MacOs but "don't work" under Linux? It may be a convention that Mac often has directories/files with spaces in their names (I don't know) whereas Linux tends not to, but that's a different matter.
-
as a I policy I prohibit folks from ever putting spaces in filenames. It's bad practice in any platform.
Sorry, but that's just wrong [EDIT: IMHO] --- we may or may not like it, but Windows uses spaces extensively and it is not "bad practice" under Windows, it's standard practice! If your app chooses to prevent creating files with spaces that's up to you, but you can't call it "bad practice" under Windows :)
-
-
-
Why would you take a Mac name with spaces in it and replace for Linux? In the sense of the OP says the spaces "work" under MacOs but "don't work" under Linux? It may be a convention that Mac often has directories/files with spaces in their names (I don't know) whereas Linux tends not to, but that's a different matter.
-
as a I policy I prohibit folks from ever putting spaces in filenames. It's bad practice in any platform.
Sorry, but that's just wrong [EDIT: IMHO] --- we may or may not like it, but Windows uses spaces extensively and it is not "bad practice" under Windows, it's standard practice! If your app chooses to prevent creating files with spaces that's up to you, but you can't call it "bad practice" under Windows :)
@JonB said in file name change to unix file with escaping:
it's standard practice!
and it causes many issues, you can find examples in this forum :-)
That's why I avoid spaces in paths and suggest others to do the same. -
-
@JonB said in file name change to unix file with escaping:
it's standard practice!
and it causes many issues, you can find examples in this forum :-)
That's why I avoid spaces in paths and suggest others to do the same.wrote on 21 Nov 2019, 08:49 last edited by@jsulm
Yes it causes issues. The question is whether it is "bad practice" given that there a billions of Windows files around the world with spaces in them. Windows uses both directories & file names with spaces in them extensively, whether you or I like it or not. And I'll say one thing: your app may choose not to create thing with spaces because of the coding problems, but if you don't allow for existing things having spaces in them under Windows because you don't believe in it, that is where the problems will arise! -
@jsulm
Yes it causes issues. The question is whether it is "bad practice" given that there a billions of Windows files around the world with spaces in them. Windows uses both directories & file names with spaces in them extensively, whether you or I like it or not. And I'll say one thing: your app may choose not to create thing with spaces because of the coding problems, but if you don't allow for existing things having spaces in them under Windows because you don't believe in it, that is where the problems will arise!@JonB Hold the horses ;)
Windows also allows you to have umlaute in the path/name, and that can cause even under windows problems.
Just because Windows allows it doesn't mean its not bad practice.
-
@JonB Hold the horses ;)
Windows also allows you to have umlaute in the path/name, and that can cause even under windows problems.
Just because Windows allows it doesn't mean its not bad practice.
wrote on 21 Nov 2019, 09:41 last edited by@J-Hilk
I admit I don't know about umlauts.Under Windows, if you don't want to deal with spaces in path/file names, try accepting the default save file name from a new Word document, or try Ctrl+C, Ctrl+V from File Explorer, or try right-click New>Folder, or try executing anything from standard
C:\Program Files\...
from the command line, or use the standard Save File dialog to get a name from the user, or a million other cases.So you're going to say all of these are bad practice under Windows. I don't think we'll get anywhere, because we must have different definitions of "bad practice".
-
@J-Hilk
I admit I don't know about umlauts.Under Windows, if you don't want to deal with spaces in path/file names, try accepting the default save file name from a new Word document, or try Ctrl+C, Ctrl+V from File Explorer, or try right-click New>Folder, or try executing anything from standard
C:\Program Files\...
from the command line, or use the standard Save File dialog to get a name from the user, or a million other cases.So you're going to say all of these are bad practice under Windows. I don't think we'll get anywhere, because we must have different definitions of "bad practice".
@JonB said in file name change to unix file with escaping:
So you're going to say all of these are bad practice under Windows
Using existing system directories with spaces is not bad practice. But using own directories/file names with spaces (or umlauts) is at least questionable. I try to avoid this.
-
wrote on 21 Nov 2019, 15:28 last edited by
yes there is directory and file as below.
Linux path : file = "/Users/xxx/test dene biri/adf.jpg"
QFile("/Users/xxx/test dene biri/adf.jpg") . gives error under ubuntu 19.
I will double check tonight
-
yes there is directory and file as below.
Linux path : file = "/Users/xxx/test dene biri/adf.jpg"
QFile("/Users/xxx/test dene biri/adf.jpg") . gives error under ubuntu 19.
I will double check tonight
wrote on 21 Nov 2019, 15:34 last edited by JonB@RahibeMeryem
My Ubuntu 19.04, I have to use Python+PySide2 instead of C++ but no matter:(py37) jon@ubuntu-19:~$ mkdir "test space" (py37) jon@ubuntu-19:~$ echo hello > "test space/file" (py37) jon@ubuntu-19:~$ python3 Python 3.7.3 | packaged by conda-forge | (default, Jul 1 2019, 21:52:21) [GCC 7.3.0] :: Anaconda, Inc. on linux Type "help", "copyright", "credits" or "license" for more information. >>> from PySide2.QtCore import QFile >>> print(QFile("test space/file").exists()) True >>> print(QFile("test space/file").size()) 6 >>> print(hex(int(QFile("test space/file").permissions()))) 0x6644 >>>
-
yes there is directory and file as below.
Linux path : file = "/Users/xxx/test dene biri/adf.jpg"
QFile("/Users/xxx/test dene biri/adf.jpg") . gives error under ubuntu 19.
I will double check tonight
@RahibeMeryem said in file name change to unix file with escaping:
yes there is directory and file as below.
Linux path : file = "/Users/xxx/test dene biri/adf.jpg"
QFile("/Users/xxx/test dene biri/adf.jpg") . gives error under ubuntu 19.
I will double check tonight
Hi,
Maybe because there's no
/Users
folder on Linux.The home folder for users under Linux is
/home
. -
yes there is directory and file as below.
Linux path : file = "/Users/xxx/test dene biri/adf.jpg"
QFile("/Users/xxx/test dene biri/adf.jpg") . gives error under ubuntu 19.
I will double check tonight
wrote on 21 Nov 2019, 16:14 last edited by@RahibeMeryem said in file name change to unix file with escaping:
yes there is directory and file as below.
Linux path : file = "/Users/xxx/test dene biri/adf.jpg"QFile("/Users/xxx/test dene biri/adf.jpg") . gives error under ubuntu 19.
On Linux/Unix systems, if you want to access to an user directory, it is preferable to use '~', for example for user foo:
QFile("~foo/test dene biri/adf.jpg")
I don't know if on macOS this is also working.
-
@KroMignon that's a shell shortcut so it may or may not work depending on what you are doing.
Using QStandardPaths would be better. -
wrote on 21 Nov 2019, 16:44 last edited by JonB
But I have asked and the OP confirmed:
yes there is directory and file as below.
Linux path : file = "/Users/xxx/test dene biri/adf.jpg"
So he must have checked that on his Linux he has a
/Users/...
, for whatever reason. He says the issue is to do with the spaces. -
But I have asked and the OP confirmed:
yes there is directory and file as below.
Linux path : file = "/Users/xxx/test dene biri/adf.jpg"
So he must have checked that on his Linux he has a
/Users/...
, for whatever reason. He says the issue is to do with the spaces.wrote on 21 Nov 2019, 17:15 last edited by KroMignon@JonB said in file name change to unix file with escaping:
for whatever reason
@RahibeMeryem Did you check if the application has read/excecute rights for each sub-directory?
-
@JonB said in file name change to unix file with escaping:
for whatever reason
@RahibeMeryem Did you check if the application has read/excecute rights for each sub-directory?
wrote on 21 Nov 2019, 17:22 last edited by@KroMignon Why are you directing this question to me?
-
Hi,
I developed my app in Mac and when I transfer to the linux there is qfile file read problem due to some of the file and dirs has " " spaces.
I try to QString.replace(" " , "\" ) and looks replaced .
but even I saw the file name escaped with \ in linux , it says cant find the name.
is there any best practices to change file name to readable format in linux ?
wrote on 21 Nov 2019, 17:42 last edited by JonB@RahibeMeryem
OK, this is bugging me :) So here is a list of steps which will resolve where we are on this issue.If you know how to open a terminal/shell/command-prompt-window on Ubuntu:
- Open a terminal/shell/command-prompt-window. (Do not type
sudo
anything, if you might be tempted to.) - Type
ls -b /Users
- Then
ls -b /Users/xxx
, with whatever for thexxx
- Then
ls -b /Users/xxx/test dene biri
- Finally
ls -b /Users/xxx/test dene biri/adf.jpg
- If you really get as far as here without a "No such file or directory"-type error, type
ls -l /Users/xxx/test dene biri/adf.jpg
- Copy the output you get as you go along and paste it here.
If you do not know how to open a terminal:
- Open the "File Explorer" from its icon on the desktop
- Make it browse to the top-level root directory, named
/
. - Go downwards into directories/folders for your path, i.e.
Users
, then whatever for thexxx
, thentest dene biri
. - Show us a screenshot (
screenshot
program, https://help.ubuntu.com/stable/ubuntu-help/screen-shot-record.html) of where you get to.
P.S.
I just noticed there is some confusion of whether the path hastest dene bir
ortest dene biri
(the extrai
at the end) in some of these posts. I may have introduced that inadvertently. Obviously ensure both Mac & Linux code use whichever spelling is correct for you. - Open a terminal/shell/command-prompt-window. (Do not type
1/29